我将举一个使用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引发FileLoadException,带有“无法验证的代码策略检查失败。(来自HRESULT的异常:0x80131402)”。
假设我正在尝试将此程序集加载到子AppDomain上,如何自定义AppDomain的安全性以允许我通过策略检查?

最佳答案

我们是一条肮脏的异常消息的受害者。不支持使用Assembly.Load(byte [])加载包含非托管代码的程序集。这是此feedback item的主题。

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



更新:链接已固定为archive.org备份副本。

关于c# - 如何动态加载包含非托管代码的原始程序集?(绕过 'Unverifiable code failed policy check'异常),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2945080/

10-13 09:38