我以前写好并调试通过的程序,现在重新打开时竟然报错,请大家帮我找找原因
出错语句如下:
Private ReadOnly ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
提示信息如下:
BC31091 从程序集或模块“System.Runtime.dll”导入类型“MarshalByRefObject”失败。
因我不常用.net,经验缺乏,所以请大家帮忙
网友答: 直接问下ai啊复制代码网友答:
ai经常是一本正经地胡说八道
框架是.NET Framework 4.8
acmgd.dll 和acdbmgd.dll等的引用也没有问题
编译平台是x64
这些都对,但问题依旧
出错语句如下:
Private ReadOnly ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
提示信息如下:
BC31091 从程序集或模块“System.Runtime.dll”导入类型“MarshalByRefObject”失败。
因我不常用.net,经验缺乏,所以请大家帮忙
网友答: 直接问下ai啊
- 这个错误非常典型,是 **.NET 版本不匹配** 导致的编译期类型加载失败。你这句:
- ```vbnet
- Private ReadOnly ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
- ```
- 本身是完全正确的 AutoCAD .NET 调用方式(获取当前文档的 `Editor` 对象)。
- 但提示:
- ```
- BC31091 从程序集或模块“System.Runtime.dll”导入类型“MarshalByRefObject”失败
- ```
- 说明编译器在加载 .NET 核心系统类型时失败,通常出现在以下几种情况:
- ---
- ## 🔍 一、问题根源分析
- ### ① **项目引用的 .NET Framework / .NET 版本错误**
- * AutoCAD 的 .NET API **不支持 .NET Core / .NET 5+ / .NET 8**。
- * 它只支持 **.NET Framework 4.5~4.8.1**(取决于 AutoCAD 版本)。
- * 而错误信息中的 “System.Runtime.dll” 是 **.NET Core** 的程序集名。
- 👉 说明你现在的项目是基于 `.NET 8.0` 或 `.NET 6.0`,而不是 `.NET Framework`。
- ---
- ## 🧩 二、解决方法
- ### ✅ 方法 1:改为 .NET Framework 项目
- 1. 在 Visual Studio 中:
- * 右键项目 → 属性 → **“应用程序”选项卡**
- * 把“目标框架”改为 **.NET Framework 4.8**(或 AutoCAD 官方建议版本)
- 例如:
- ```
- <TargetFramework>net48</TargetFramework>
- ```
- 2. 保存、重新编译。
- 3. 如果你的 AutoCAD 是 2026 版,可以参考官方说明:
- * AutoCAD 2026 兼容 **.NET Framework 4.8**
- * 不支持 .NET 8(即 .NET Core 系列)
- ---
- ### ✅ 方法 2:重新添加 AutoCAD 的引用
- 即使版本正确,也可能引用丢失。
- 1. 删除并重新引用以下 DLL(来自 AutoCAD 安装目录,例如 `C:\Program Files\Autodesk\AutoCAD 2026\`):
- * `acdbmgd.dll`
- * `acmgd.dll`
- * `acdb19.dll` 或相应版本
- 2. 检查它们的属性:
- * “复制本地” = **False**
- * “特定版本” = **False**
- ---
- ### ✅ 方法 3:检查 Visual Studio 编译平台
- AutoCAD 只能加载 **x64 程序集**。
- 确保:
- ```
- 生成 → 配置管理器 → 平台 = x64
- ```
- ---
- ## 🧰 三、如果你非要用 .NET 8 或 .NET 6
- AutoCAD 2026 新增了对 **.NET 8 插件开发的实验性支持**(通过 AutoCAD Core Console 或 Civil API)。
- 但若你直接使用 `Autodesk.AutoCAD.ApplicationServices.Application` 等旧 API,会出错,因为它依赖 `MarshalByRefObject`(.NET Core 已移除)。
- 要在 .NET 8 中使用,需:
- * 引用新的 AutoCAD .NET SDK 包(Autodesk.AutoCAD.NET.Core.dll)
- * 改用新的命名空间结构和加载机制
- 但**普通 AutoCAD 插件(.dll + NETLOAD)依然必须是 .NET Framework 4.8**。
- ---
- ## ✅ 推荐最终方案
- | 项目类型 | 建议框架 | 支持 AutoCAD 版本 | 状态 |
- | ----------- | ------------------------- | ------------- | ------ |
- | 插件(NETLOAD) | .NET Framework 4.8 | 2019–2026 | ✅ 稳定 |
- | .NET 8 | 仅 AutoCAD Core Console 模式 | 实验性 | ⚠️ 不推荐 |
- ---
- ## 🧩 结论
- 你的错误核心原因:
- > 项目改成了 .NET 8 或 .NET Core,导致 AutoCAD 的 API (基于 .NET Framework)无法识别 `MarshalByRefObject`。
- ---
- 💡**修复步骤简要:**
- 1. 改项目为 `.NET Framework 4.8`。
- 2. 删除并重新引用 `acmgd.dll` 和 `acdbmgd.dll`。
- 3. 编译平台改为 `x64`。
- ---
- 如果你方便的话,可以贴出你 `.vbproj` 文件的头几行(包含 `<TargetFramework>`),我可以直接帮你改成能在 CAD 里成功 NETLOAD 的版本。

框架是.NET Framework 4.8
acmgd.dll 和acdbmgd.dll等的引用也没有问题
编译平台是x64
这些都对,但问题依旧