我试图使用AssemblyResolve来解决AnyCPU平台的依赖关系。
我有三门课:
class Resolver {
public static void Startup() { }
static Resolver()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs
...
}
}
class Foo {
private ClassFromAssembly _foo;
public Foo() {
_foo = new ClassFromAssembly();
}
}
class Bar {
static Bar() {
Resolver.Setup();
}
public voidFoo() {
var foo = new Foo();
//...
}
}我试图用ClassFromAssembly事件加载AssemblyResolve类。但AssemblyResolve似乎从未被解雇过。
我有两个包含ClassFromAssembly的DLL,一个用于x86,一个用于x64。我想在AnyCPU平台上动态加载它们,但AssemblyResolve从未启动。
为什么AssemblyResolve不开火?
发布于 2017-04-30 13:54:41
您看到的行为是由.NET运行时可能执行的方法内联引起的。
要使您的方案工作,请确保受影响的方法没有内联。就像这样:
class Bar {
static Bar() {
Resolver.Setup();
}
public voidFoo() {
_DoTheJob();
}
[MethodImpl(MethodImplOptions.NoInlining)]
void _DoTheJob() {
var foo = new Foo();
//...
}
}方法未内联后,将确保先安装解析器,并在安装解析器后加载包含ClassFromAssembly的程序集。
还请确保在安装程序集解析器之前不会加载感兴趣的程序集。否则,丢失的程序集引用将不会得到解决,这些故障将永远缓存在当前的AppDomain中,例如,您将永远不会为它们获取AssemblyResolve事件。
https://stackoverflow.com/questions/43706794
复制相似问题