我将举一个使用的例子 system.data.sqlite.dll 这是一个带有非管理代码的混合程序集:如果我执行此操作:

  var assembly= Assembly.LoadFrom("System.Data.SQLite.DLL")

没有例外,但是如果我这样做:

  var rawAssembly = File.ReadAllBytes("System.Data.SQLite.DLL");
  var assembly = Assembly.Load(rawAssembly);

CLR以“无法验证的代码失败的策略检查。假设我正在尝试将该组件加载到子App -domain上,我该如何自定义应用程序的安全性以使我通过策略检查?

有帮助吗?

解决方案

我们是Crummy例外信息的受害者。不支持使用包含未托管代码的汇编(byte [])加载组件。这是这个主题 反馈项目.

更新:链接的反馈项目消失了,在VS2012发布时间的清理工作中删除。它唯一可以恢复的部分是从另一个网页复制的该片段:

“ […]我们只允许加载iLonly图像[…],因为其他任何事情都不安全” -

更新:链接使用Archive.org备份副本修复。

其他提示

问题是CLR不会执行正常的DLL加载步骤 - 例如将DLL映射到不同页面,调整修复程序等。仅阅读托管元数据。没有证据或安全设置将改变此行为。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top