加载网络映射盘中的assembly失败的处理办法
错误症状:
1.{"未能加载文件或程序集“file://*****”或它的某一个依赖项。不支持操作。 (异常来自 HRESULT:0x80131515)":"file://****"};
2.{"尝试从一个网络位置加载程序集,在早期版本的 .NET Framework 中,这会导致对该程序集进行沙盒处理。此发行版的 .NET Framework 默认情况下不启用 CAS 策略,因此,此加载可能会很危险。如果此加载不是要对程序集进行沙盒处理,请启用 loadFromRemoteSources 开关。有关详细信息,请参见 http://go.microsoft.com/fwlink/?LinkId=155569。"}
解决办法入下文:
我有一个网络映射盘,盘符是Z:。在Z盘下面,放了一个assembly,名为test.dll。然后,我在VS2010中建立了一个.NET 4.0的工程,程序中有下面一段代码:
string dll = @"Z:\test.dll";
Assembly a = Assembly.LoadFrom(dll);
执行代码,抛出FileLoadException异常:Could not load file or assembly 'file:///Y:\bb\nvo_cas.dll' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515)。
深入到内部异常:An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous. If this load is not intended to sandbox the assembly, please enable the loadFromRemoteSources switch. See http://go.microsoft.com/fwlink/?LinkId=155569 for more information.。
看来是.NET的安全机制阻止加载一个网络上(本地网或者互联网)的assembly。
【办法一】
根据提示,找到了MSDN的一篇文章。文章给出的解决办法是:在程序的配置文件中加入下面的xml片段:
<configuration>
......
<runtime>
<!-- WARNING: will load assemblies from remote locations as fully trusted! -->
<loadFromRemoteSources enabled="true" />
</runtime>
......
</configuration>
按照这个解决办法,程序运行正确。
MSDN链接:http://msdn.microsoft.com/en-us/library/dd409252(VS.100).aspx。
【办法二】
Assembly类有一个静态函数UnsafeLoadFrom,这个函数在加载一个assembly的时候,不会进行一些安全检查。将原先的代码修改如下即可:
string dll = @"Z:\test.dll";
Assembly a = Assembly.UnsafeLoadFrom(dll);
【办法三】
Assembly的load方法有很多的重载,可以使用其中的一个参数为byte[]的load函数。代码如下:
string dll = @"Z:\test.dll"; byte[] assemblyBuffer = File.ReadAllBytes(dll); Assembly a = Assembly.Load(assemblyBuffer); 转载自:http://blog.csdn.net/studying/article/details/6663627
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界