You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

.NET Framework类库AutoCAD DLL引用问题——CS0246错误

AutoCAD .NET API插件开发:CS0246等引用错误排查解决

问题概述

我正尝试使用AutoCAD .NET API开发AutoCAD插件,但在DLL引用环节遇到严重问题,持续出现CS0246及类似“找不到类型或命名空间”错误,无法继续开发,恳请有相关经验的人士提供帮助。

开发目标

通过.NET动态管理AutoCAD内的块属性数据,构建自定义钢筋细部系统。我长期使用AutoLISP实现该功能,现在希望基于.NET搭建更稳定可靠的系统。

环境信息

  • 测试过的AutoCAD版本:2021、2023,当前测试版本为2017
  • Visual Studio:2022社区版(最新版本)
  • .NET Framework:4.8
  • 目标平台:x64
  • 引用的DLL:
    acmgd.dll
    acdbmgd.dll
    (引用路径:C:\Program Files\Autodesk\AutoCAD 2023)
    

错误信息

CS0246: 找不到类型或命名空间名称“CommandMethod”
CS0246: 找不到类型或命名空间名称“Editor”
CS0246: 找不到类型或命名空间名称“Document”
CS0117: “Application”不包含“DocumentManager”的定义

怀疑方向

我怀疑问题与缺失命名空间或DLL加载不当有关,但未找到可靠解决方案。

测试代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using System.Xml.Linq;

namespace DonatiOtomatik
{
    public class DonatiKomut
    {
        [CommandMethod("TESTKOMUT")]
        public void Yazdir()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            ed.WriteMessage("\nMerhaba .NET dünyası!");
        }
    }
}

解决方案

1. 匹配AutoCAD版本对应的DLL

当前测试的是AutoCAD 2017,但引用的是2023版的DLL,版本不匹配是核心问题。必须引用AutoCAD 2017安装目录下的acmgd.dll和acdbmgd.dll,默认路径为C:\Program Files\Autodesk\AutoCAD 2017

2. 调整DLL引用属性

添加对应版本的DLL后,在Visual Studio的“引用”列表中找到这两个文件,右键打开属性面板:

  • 将「复制本地」设置为False(AutoCAD运行时会自带这些核心DLL,无需复制到输出目录)
  • 确认「版本」为AutoCAD 2017对应的版本号(例如19.1.0.0)

3. 确认项目框架匹配

AutoCAD 2017官方要求的.NET Framework版本是4.7,虽然4.8向下兼容,但将项目目标框架调整为4.7能避免潜在的兼容性问题:

  • 右键项目 → 属性 → 应用 → 目标框架 → 选择.NET Framework 4.7

4. 验证最小可运行示例

替换为以下简化代码测试,排除其他代码干扰:

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

namespace TestAutoCADNet
{
    public class TestCommands
    {
        [CommandMethod("TESTCMD")]
        public void TestCommand()
        {
            var doc = Application.DocumentManager.MdiActiveDocument;
            var ed = doc.Editor;
            ed.WriteMessage("\nAutoCAD .NET 测试成功!");
        }
    }
}

内容的提问来源于stack exchange,提问作者ozan aydemir

火山引擎 最新活动