首页 > 解决方案 > .NET 何时尝试解析程序集引用?

问题描述

我在两个单独的程序中调用第三方库。一个程序有效,另一个无效。问题是 .NET 试图在不同时间解析程序集引用。

这是详细信息。第三方库有一个类初始化器,它为 appdomain 中的 ResolveAssembly 事件注册一个处理程序。如果未注册此处理程序,则对该类的构造函数的调用将失败。

在有效的程序中,这个事件在构造函数被调用之前引发(即,在调试器中,当我进入构造函数时,我看到事件被引发)。在不起作用的程序中,事件在包含对构造函数的调用的方法之前引发(即,当我进入调用方法时,我看到事件被引发)。在前一种情况下,事件在引发事件之前由类初始化程序注册;在后者中,解析发生在调用类初始化程序之前,后来我在构造函数中得到“找不到文件”异常。

由于这两种方法是相同的,我必须假设包含程序的某些东西导致了不同的行为。但是我无法识别任何可能导致它的编译器选项或 appdomain 设置。是否有我可能遗漏的任何微妙的程序集解析规则?

编辑:为了清楚起见,我要求提供有关CLR何时尝试解析引用的信息的链接,而不是how。在这两种情况下,我都调用了一个如下所示的方法:

void CreateObject()
{
     SomeObject o = new SomeObject();
}

在一种情况下,解决方案发生在我进入 CreateObject 时。另一方面,它发生在 SomeObject 构造函数之前。在第二种情况下,CLR 能够延迟程序集解析肯定是有原因的,但我一直没能找到它。

标签: c#.net

解决方案


推荐阅读