尝试从C#程序集访问程序集时,有以下几种方法:
AssemblyResolve事件处理程序http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve(v=vs.110).aspx正如http://msdn.microsoft.com/en-us/library/system.resolveeventargs.name(v=vs.110).aspx中对事件的ResolveEventArgs属性在(1)中指出的那样:“名称是应用策略之前的程序集名称。”
但是,我没有找到任何关于这些方法的顺序的文档。在探测重定向之前是否调用了AssemblyResolve事件处理程序?还是反过来?
第二,是否有可能以某种方式将该策略应用于ResolveEventArgs?例如,从.config文件请求重定向版本范围?
发布于 2014-02-04 19:58:02
我看到了两个问题。如果我没有提供足够的信息,请纠正我。
AssermblyResolve事件。因此,首先探测程序集加载位置,然后如果找不到程序集,则调用AssermblyResolve事件。如果正确加载所有程序集,则AssemblyResolve事件将根本不会触发。AppDomain,这是可能的。当程序集没有正确加载,并且AssemblyResolve的AppDomain触发时,您就有机会手动解决它。首先,您可以附加到事件中,以了解加载程序集已失败。
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;然后尝试从不同的位置加载替换程序集,这取决于您的标准:
static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
if (args.Name == "ClassLibrary1, Version=2.0.0.0, Culture=neutral, PublicKeyToken=e261024fcc198a53")
return Assembly.LoadFile("d:\\differentPath\\ClassLibrary1.dll");
else
return null;
}据我所知,绑定重定向对于重定向到不同版本的程序集很有用,但不能将加载程序重定向到查找程序集的特定路径。
https://stackoverflow.com/questions/21560954
复制相似问题