You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#开发AutoCAD功能报CS0106、CS8321错误问题求助

报错根因

两个报错是同一个代码结构问题引发的:你把标注了[CommandMethod]的AutoCAD命令方法写在了其他方法的代码块内部,被编译器识别成了C#本地函数。

  • CS0106:C#语法规定,嵌套在其他方法内部的本地函数,不能使用public/private这类访问修饰符,你给本地函数加public修饰符直接违反语法规则
  • CS8321:本地函数的作用域仅限声明它的外层方法内部,你既没有在外层方法里调用这个函数,AutoCAD的命令反射机制也扫描不到嵌套在方法内部的函数,因此提示函数声明后从未使用。
修复方案

AutoCAD .NET开发的规则要求,所有带[CommandMethod]特性的命令方法,必须是public类的直接成员,不能嵌套在其他方法、属性的代码块中。修正后的可运行代码结构如下:

using System.IO;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;

// 定义public级别的容器类,用来存放所有命令方法
public class CadCommands
{
    [CommandMethod("OpenDrawing", CommandFlags.Session)]
    // 方法作为类的直接成员,此时使用public修饰符才符合语法
    public static void OpenDrawing()
    {
        string strFileName = "C:\\DRAFT.dwg";
        DocumentCollection acDocMgr = Application.DocumentManager;

        if (File.Exists(strFileName))
        {
            acDocMgr.Open(strFileName, false);
        }
        else
        {
            acDocMgr.MdiActiveDocument.Editor.WriteMessage("File " + strFileName + " does not exist.");
        }
    }
}
后续开发注意点
  • 所有自定义AutoCAD命令都要放在public类的根层级,不要写在其他方法的大括号内部
  • 命令方法一般标记为public static即可,不需要类继承特殊接口,AutoCAD就能通过反射识别到加载的命令
  • 代码编译成功后,在AutoCAD中用NETLOAD命令加载生成的dll文件,输入OpenDrawing命令即可执行对应逻辑。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 19:48:32