如何动态加载包含非托管代码的原始程序集?(绕过'无法验证的代码失败的策略检查'异常)

我将举一个使用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 [])加载程序集。这是此反馈项的主题。 更新:链接的反馈项目已消失,作为VS2012发布时清理的一部分被删除。它的唯一部分仍然可以恢复是从另一个网页复制的这个片段:   “[...]我们只允许加载ILOnly图像[...],因为其他任何东西都不安全” - 更新:使用archive.org备份副本修复链接。     
问题是CLR不执行正常的DLL加载步骤 - 比如将dll分隔成不同的页面,调整fixup等等。当从原始字节加载程序集时,这些原始字节按原样映射到内存中,并且只读取托管的元数据。没有任何证据或安全设置会改变此行为。     

要回复问题请先登录注册