环境搭建
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 项目创建
步骤
- 新建项目 → Class Library (.NET Framework) → 选择
.NET Framework 4.8 - 添加引用 → 浏览 → 导航到 AutoCAD 安装目录(如
C:\Program Files\Autodesk\AutoCAD 2024\) - 选择
acdbmgd.dll、acmgd.dll、accoremgd.dll - 将引用的 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 调试设置
- 项目属性 → Debug → Start external program →
C:\Program Files\Autodesk\AutoCAD 2024\acad.exe - 按 F5 启动 AutoCAD
- 进入 AutoCAD 后执行
NETLOAD加载刚编译的 DLL - 代码中的断点即刻生效
附加到已运行的 AutoCAD
- 调试 → Attach to Process
- 勾选 “Show processes from all users”
- 选择
acad.exe - 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 中。