Thi*_*uda 20 .net c# appdomain late-binding appdomainsetup
我将举一个使用System.Data.SQLite.DLL的例子, 它是一个带有非托管代码的混合程序集:如果我执行这个:
var assembly= Assembly.LoadFrom("System.Data.SQLite.DLL")
Run Code Online (Sandbox Code Playgroud)
没有异常被抛出,但如果我这样做:
var rawAssembly = File.ReadAllBytes("System.Data.SQLite.DLL");
var assembly = Assembly.Load(rawAssembly);
Run Code Online (Sandbox Code Playgroud)
CLR抛出FileLoadException,其中包含"无法验证的代码失败的策略检查.(HRESULT异常:0x80131402)".假设我正在尝试在子AppDomain上加载此程序集,如何自定义AppDomain的安全性以允许我通过策略检查?
Pau*_*der 12
问题是CLR不执行正常的DLL加载步骤 - 比如将dll分隔成不同的页面,调整fixup等等.当从原始字节加载程序集时,这些原始字节按原样映射到内存中,并且只读取托管的元数据.没有任何证据或安全设置会改变此行为.