C# autocad二次开发,netload命令异常System.NotSupportedException

本文介绍了一种DLL文件在网络传输后出现加载失败的情况,并给出了具体的解决步骤。问题出现在DLL文件被标记为来自网络源,导致加载时触发了.NET Framework的安全策略。通过解除DLL文件的锁定状态,可以成功加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自己写了个dll,发给别人后,结果他用netload命令加载时老是出错,错误如下:

命令: netload

命令: 无法加载程序集。错误详细信息: System.IO.FileLoadException:

未能加载文件或程序集“file:///D:\\Lab1.dll”或它的某一个依赖项。不支持操作。 (异常来自 HRESULT:0x80131515)

文件名:“file:///D:\\Lab1.dll” ---> System.NotSupportedException:尝试从一个网络位置加载程序集,在早期版本的 .NET

Framework 中,这会导致对该程序集进行沙盒处理。此发行版的 .NET Framework默认情况下不启用 CAS

策略,因此,此加载可能会很危险。如果此加载不是要对程序集进行沙盒处理,请启用 loadFromRemoteSources开关。有关详细信息,请参见

http://go.microsoft.com/fwlink/?LinkId=155569

   在 System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String

codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint,

StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean

forIntrospection, Boolean suppressSecurityChecks)

   在 System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName

assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean

forIntrospection, Boolean suppressSecurityChecks)

   在 System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile,

Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm

hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks,

StackCrawlMark& stackMark)

   在 System.Reflection.Assembly.LoadFrom(String assemblyFile)

   在 Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)

   在 loadmgd()

===================================================================================

解决方法:

原来用邮件发送给别人后,这个dll被锁定了,在这个dll上点右键,属性里点解除锁定,确定后,这样这个dll就可以被加载了!

### 关于 AutoCAD NetLoad 命令中的 `System.NotSupportedException` 当在 AutoCAD 中尝试通过 `NETLOAD` 加载自定义 DLL 文件时,如果遇到 `System.NotSupportedException` 错误,则表明所使用的 .NET 方法或功能可能未被支持。此问题通常发生在调用某些特定方法(如 `Assembly.LoadFrom`),这些方法可能会因环境配置或其他因素引发异常。 以下是可能导致该错误的原因以及对应的解决方案: #### 可能原因分析 1. **目标框架版本不匹配** 如果开发的插件基于较新的 .NET Framework 版本(例如 4.x 或更高版),而当前运行的 AutoCAD 使用的是旧版本的 CLR(Common Language Runtime),则会触发此类异常[^1]。 2. **DLL 的架构冲突** 当加载的程序集是针对不同平台编译的(如 x86 和 x64 不一致),也可能抛出类似的异常。这种情况下,具体表现为 `System.BadImageFormatException` 而不是 `NotSupportedException`,但仍需注意两者之间的关联性[^2]。 3. **AutoCAD 对部分 API 支持有限** 某些高级特性或者新引入的功能,在早期版本的 AutoCAD 中并未完全实现。因此即使代码逻辑无误,仍可能出现不受支持的操作提示。 #### 解决方案建议 为了有效处理上述情况并成功完成 netload 过程,请按照以下方式调整项目设置和操作流程: - **确认兼容的目标框架** 确保您的 C# 插件是以适合 AutoCAD 执行所需最低要求的标准构建而成。对于大多数主流发行版而言,推荐选用 `.NET Framework 4.7` 或更低作为目标框架版本。 - **统一应用程序位数模式** 验证生成的 dll 是否与宿主应用保持相同体系结构 (即均为 32-bit/x86 或者全为 64-bit/x64),从而避免潜在格式不符引起的崩溃现象。 - **启用对话框界面展示** 若发现执行过程中缺少预期图形化交互窗口呈现的情况,可通过修改注册表键值来恢复默认行为。具体做法涉及将变量 FILEDIA 设置成开启状态 (`SET FILEDIA=1`) 后重新启动软件再试一次 load 动作[^4]。 另外值得注意的一点在于,尽管提供了多种途径帮助克服这一难题,实际效果取决于具体情况下的差异表现形式;必要时候可以考虑升级至最新稳定版本以获得更广泛的支持覆盖范围。 ```csharp // 示例代码片段用于验证装配体加载过程是否存在异常状况 try { var assembly = System.Reflection.Assembly.LoadFrom(@"F:\path_to_your_dll\YourPlugin.dll"); } catch (System.Exception ex){ Console.WriteLine($"Error occurred:{ex.Message}"); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值