我以前写好并调试通过的程序,现在重新打开时竟然报错,请大家帮我找找原因

出错语句如下:
Private ReadOnly ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor

提示信息如下:

BC31091        从程序集或模块“System.Runtime.dll”导入类型“MarshalByRefObject”失败。


因我不常用.net,经验缺乏,所以请大家帮忙


网友答: 直接问下ai啊
  1. 这个错误非常典型,是 **.NET 版本不匹配** 导致的编译期类型加载失败。你这句:

  2. ```vbnet
  3. Private ReadOnly ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
  4. ```

  5. 本身是完全正确的 AutoCAD .NET 调用方式(获取当前文档的 `Editor` 对象)。

  6. 但提示:

  7. ```
  8. BC31091 从程序集或模块“System.Runtime.dll”导入类型“MarshalByRefObject”失败
  9. ```

  10. 说明编译器在加载 .NET 核心系统类型时失败,通常出现在以下几种情况:

  11. ---

  12. ## 🔍 一、问题根源分析

  13. ### ① **项目引用的 .NET Framework / .NET 版本错误**

  14. * AutoCAD 的 .NET API **不支持 .NET Core / .NET 5+ / .NET 8**。
  15. * 它只支持 **.NET Framework 4.5~4.8.1**(取决于 AutoCAD 版本)。
  16. * 而错误信息中的 “System.Runtime.dll” 是 **.NET Core** 的程序集名。

  17. 👉 说明你现在的项目是基于 `.NET 8.0` 或 `.NET 6.0`,而不是 `.NET Framework`。

  18. ---

  19. ## 🧩 二、解决方法

  20. ### ✅ 方法 1:改为 .NET Framework 项目

  21. 1. 在 Visual Studio 中:

  22.    * 右键项目 → 属性 → **“应用程序”选项卡**
  23.    * 把“目标框架”改为 **.NET Framework 4.8**(或 AutoCAD 官方建议版本)

  24.    例如:

  25.    ```
  26.    <TargetFramework>net48</TargetFramework>
  27.    ```

  28. 2. 保存、重新编译。

  29. 3. 如果你的 AutoCAD 是 2026 版,可以参考官方说明:

  30.    * AutoCAD 2026 兼容 **.NET Framework 4.8**
  31.    * 不支持 .NET 8(即 .NET Core 系列)

  32. ---

  33. ### &#9989; 方法 2:重新添加 AutoCAD 的引用

  34. 即使版本正确,也可能引用丢失。

  35. 1. 删除并重新引用以下 DLL(来自 AutoCAD 安装目录,例如 `C:\Program Files\Autodesk\AutoCAD 2026\`):

  36.    * `acdbmgd.dll`
  37.    * `acmgd.dll`
  38.    * `acdb19.dll` 或相应版本
  39. 2. 检查它们的属性:

  40.    * “复制本地” = **False**
  41.    * “特定版本” = **False**

  42. ---

  43. ### &#9989; 方法 3:检查 Visual Studio 编译平台

  44. AutoCAD 只能加载 **x64 程序集**。

  45. 确保:

  46. ```
  47. 生成 → 配置管理器 → 平台 = x64
  48. ```

  49. ---

  50. ## &#129520; 三、如果你非要用 .NET 8 或 .NET 6

  51. AutoCAD 2026 新增了对 **.NET 8 插件开发的实验性支持**(通过 AutoCAD Core Console 或 Civil API)。
  52. 但若你直接使用 `Autodesk.AutoCAD.ApplicationServices.Application` 等旧 API,会出错,因为它依赖 `MarshalByRefObject`(.NET Core 已移除)。

  53. 要在 .NET 8 中使用,需:

  54. * 引用新的 AutoCAD .NET SDK 包(Autodesk.AutoCAD.NET.Core.dll)
  55. * 改用新的命名空间结构和加载机制

  56. 但**普通 AutoCAD 插件(.dll + NETLOAD)依然必须是 .NET Framework 4.8**。

  57. ---

  58. ## &#9989; 推荐最终方案

  59. | 项目类型        | 建议框架                      | 支持 AutoCAD 版本 | 状态     |
  60. | ----------- | ------------------------- | ------------- | ------ |
  61. | 插件(NETLOAD) | .NET Framework 4.8        | 2019–2026     | &#9989; 稳定   |
  62. | .NET 8      | 仅 AutoCAD Core Console 模式 | 实验性           | &#9888;&#65039; 不推荐 |

  63. ---

  64. ## &#129513; 结论

  65. 你的错误核心原因:

  66. > 项目改成了 .NET 8 或 .NET Core,导致 AutoCAD 的 API (基于 .NET Framework)无法识别 `MarshalByRefObject`。

  67. ---

  68. &#128161;**修复步骤简要:**

  69. 1. 改项目为 `.NET Framework 4.8`。
  70. 2. 删除并重新引用 `acmgd.dll` 和 `acdbmgd.dll`。
  71. 3. 编译平台改为 `x64`。

  72. ---

  73. 如果你方便的话,可以贴出你 `.vbproj` 文件的头几行(包含 `<TargetFramework>`),我可以直接帮你改成能在 CAD 里成功 NETLOAD 的版本。
复制代码


网友答: ai经常是一本正经地胡说八道
框架是.NET Framework 4.8
acmgd.dll 和acdbmgd.dll等的引用也没有问题
编译平台是x64

这些都对,但问题依旧
  • 上一篇:绘制方柱-JIG应用
  • 下一篇:没有了