我正在尝试使用AssemblyResolve
来解决AnyCPU平台的依赖关系。
我有3个班级:
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
没有开火?
答案 0 :(得分:0)
您看到的行为是由.NET运行时可能执行的方法内联引起的。
要使您的方案有效,请确保未内联受影响的方法。像这样:
class Bar {
static Bar() {
Resolver.Setup();
}
public voidFoo() {
_DoTheJob();
}
[MethodImpl(MethodImplOptions.NoInlining)]
void _DoTheJob() {
var foo = new Foo();
//...
}
}
一旦没有内联方法,保证首先安装你的解析器,并且在安装了解析器之后,>将加载包含ClassFromAssembly
的程序集。
P.S。还要确保在安装程序集解析程序之前未加载感兴趣的程序集。否则,错过的程序集引用将无法解决,并且这些故障将永远缓存在当前的AppDomain中,例如,你永远不会再为他们举办AssemblyResolve
活动。