Skip to content
C#
环境搭建

环境搭建

AutoCAD .NET API 允许使用 C# 编写命令、自定义对象和自动化流程。本章带你从零搭建开发环境。


版本与引用

AutoCAD 版本 → .NET Framework 版本

AutoCAD 版本 .NET Framework 托管 DLL 路径
2017~2024 4.8 {安装目录}\acdbmgd.dll, acmgd.dll, accoremgd.dll
2025+ .NET 8 引入跨平台支持(仍需验证具体版本)

必须引用的 DLL

DLL 命名空间 用途
AcDbMgd.dll Autodesk.AutoCAD.DatabaseServices 数据库对象、实体、事务
AcMgd.dll Autodesk.AutoCAD.ApplicationServices 应用程序、文档管理
AcCoreMgd.dll Autodesk.AutoCAD.EditorInput 编辑器、用户交互
AcCui.dll (可选) Autodesk.AutoCAD.Customization 自定义 UI(Ribbon、菜单)

🚨 引用时设置 Copy Local = False(右键引用 → 属性)。这些 DLL 随 AutoCAD 安装,不应复制到你的输出目录。否则可能版本冲突并导致 FileLoadException


Visual Studio 项目创建

步骤

  1. 新建项目 → Class Library (.NET Framework) → 选择 .NET Framework 4.8
  2. 添加引用 → 浏览 → 导航到 AutoCAD 安装目录(如 C:\Program Files\Autodesk\AutoCAD 2024\
  3. 选择 acdbmgd.dllacmgd.dllaccoremgd.dll
  4. 将引用的 Copy Local 设为 False

.csproj 参考

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net48</TargetFramework>
    <LangVersion>8.0</LangVersion>
    <CopyLocalLockFileAssemblies>false</CopyLocalLockFileAssemblies>
  </PropertyGroup>

  <ItemGroup>
    <Reference Include="AcDbMgd">
      <HintPath>C:\Program Files\Autodesk\AutoCAD 2024\AcDbMgd.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="AcMgd">
      <HintPath>C:\Program Files\Autodesk\AutoCAD 2024\AcMgd.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="AcCoreMgd">
      <HintPath>C:\Program Files\Autodesk\AutoCAD 2024\AcCoreMgd.dll</HintPath>
      <Private>False</Private>
    </Reference>
  </ItemGroup>
</Project>

第一个命令:Hello AutoCAD

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;

namespace MyAutoCADAddin
{
    public class MyCommands
    {
        [CommandMethod("HELLO")]    // AutoCAD 中通过 HELLO 命令调用
        public void HelloCommand()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            ed.WriteMessage("\nHello, AutoCAD!");
        }
    }
}

CommandMethod 特性

// 基本用法
[CommandMethod("命令名")]

// 分组(便于管理)
[CommandMethod("MYGROUP", "HELLO", CommandFlags.Modal)]

// 常用 CommandFlags
[CommandMethod("CMD", CommandFlags.Session)]       // 会话级(无文档也可运行)
[CommandMethod("CMD", CommandFlags.Transparent)]   // 透明命令(如 ZOOM 中可调用)
[CommandMethod("CMD", CommandFlags.NoHistory)]     // 不记录到命令行历史

加载插件

.NET 程序集加载方式

AutoCAD 加载 C# DLL 有几种方式:

1. NETLOAD 命令(开发调试常用)

Command: NETLOAD
→ 选择你的 .dll 文件
→ 命令可用

🚨 每次重新编译后必须重新 NETLOAD。调试时配置 VS 的"启动外部程序"可以 F5 自动附加。

2. 自动加载(Registry / 部署包)

写入注册表实现 AutoCAD 启动时自动加载:

HKCU\Software\Autodesk\AutoCAD\R24.3\ACAD-5001:409\Applications\MyAddin

或使用 .bundle 包(推荐):

MyAddin.bundle/
├── PackageContents.xml      # 描述加载方式
├── Contents/
│   ├── MyAddin.dll
│   └── MyAddin.dependencies/

调试配置

Visual Studio 调试设置

  1. 项目属性 → Debug → Start external program → C:\Program Files\Autodesk\AutoCAD 2024\acad.exe
  2. 按 F5 启动 AutoCAD
  3. 进入 AutoCAD 后执行 NETLOAD 加载刚编译的 DLL
  4. 代码中的断点即刻生效

附加到已运行的 AutoCAD

  1. 调试 → Attach to Process
  2. 勾选 “Show processes from all users”
  3. 选择 acad.exe
  4. Attach — 确保选择 “Managed (.NET Framework 4.x)",如果是混合调试需选 “Native + Managed”

💡 在项目属性的 Build Events → Post-build 中加一行 NETLOAD 脚本或用 Lisp 自动化加载,可缩短"编译→测试"循环。


关键命名空间速查

using Autodesk.AutoCAD.Runtime;              // CommandMethod, ObjectARX 特性
using Autodesk.AutoCAD.ApplicationServices;   // Application, Document
using Autodesk.AutoCAD.DatabaseServices;      // Database, Transaction, Entity, Line, Circle...
using Autodesk.AutoCAD.EditorInput;           // Editor, PromptResult, SelectionFilter
using Autodesk.AutoCAD.Geometry;              // Point3d, Vector3d, Matrix3d, Line3d...
using Autodesk.AutoCAD.Colors;                // Color, Transparency
using Autodesk.AutoCAD.LayerManager;          // LayerTable, LayerTableRecord

项目结构最佳实践

MyAutoCADAddin/
├── MyAutoCADAddin.csproj
├── Commands/
│   ├── DrawCommands.cs            # 绘图命令
│   └── ModifyCommands.cs          # 编辑命令
├── Helpers/
│   ├── LayerHelper.cs             # 图层操作工具
│   ├── EntityHelper.cs            # 实体操作工具
│   └── TransactionHelper.cs      # 事务包装
├── Models/
│   └── DrawingConfig.cs           # 配置数据结构
└── Initialization.cs              # 插件初始化/事件注册

💡 将命令逻辑(Commands)和工具方法(Helpers)分离,保持命令方法简短(通常 < 50 行),具体逻辑提取到 Helper 中。