我在两个单独的程序中调用第三方库。一个程序有效,另一个没有。问题是.NET试图在不同的时间解析程序集引用。
以下是详细信息。第三方库有一个类初始值设定项,用于在appdomain中注册ResolveAssembly事件的处理程序。如果未注册此处理程序,则对该类的构造函数的调用将失败。
在有效的程序中,在调用构造函数之前引发此事件(即,在调试器中,当我进入构造函数时,我看到事件被引发)。在不起作用的程序中,事件在包含对构造函数的调用的方法之前引发(即,当我进入调用方法时,我看到事件被引发)。在前一种情况下,事件在事件发生之前由类初始化程序注册;在后者中,解析在调用类初始值设定项之前发生,之后我得到一个未找到的文件"构造函数中的异常。
由于这两种方法完全相同,我必须假设包含程序的某些内容导致了不同的行为。但是我无法识别可能导致它的任何编译器选项或appdomain设置。我可能会遗漏任何微妙的装配解决规则吗?
编辑:为了清楚起见,我要求提供有关在 CLR尝试解析引用时的确切信息的链接,而不是如何。在这两种情况下,我调用的方法如下:
void CreateObject()
{
SomeObject o = new SomeObject();
}
在一种情况下,解析在我进入CreateObject时发生。另一方面,它发生在SomeObject构造函数之前。 CLR能够在第二种情况下延迟装配分辨率,但我还没有找到它。