c# - .NET 何时尝试解析程序集引用?
问题描述
我在两个单独的程序中调用第三方库。一个程序有效,另一个无效。问题是 .NET 试图在不同时间解析程序集引用。
这是详细信息。第三方库有一个类初始化器,它为 appdomain 中的 ResolveAssembly 事件注册一个处理程序。如果未注册此处理程序,则对该类的构造函数的调用将失败。
在有效的程序中,这个事件在构造函数被调用之前引发(即,在调试器中,当我进入构造函数时,我看到事件被引发)。在不起作用的程序中,事件在包含对构造函数的调用的方法之前引发(即,当我进入调用方法时,我看到事件被引发)。在前一种情况下,事件在引发事件之前由类初始化程序注册;在后者中,解析发生在调用类初始化程序之前,后来我在构造函数中得到“找不到文件”异常。
由于这两种方法是相同的,我必须假设包含程序的某些东西导致了不同的行为。但是我无法识别任何可能导致它的编译器选项或 appdomain 设置。是否有我可能遗漏的任何微妙的程序集解析规则?
编辑:为了清楚起见,我要求提供有关CLR何时尝试解析引用的信息的链接,而不是how。在这两种情况下,我都调用了一个如下所示的方法:
void CreateObject()
{
SomeObject o = new SomeObject();
}
在一种情况下,解决方案发生在我进入 CreateObject 时。另一方面,它发生在 SomeObject 构造函数之前。在第二种情况下,CLR 能够延迟程序集解析肯定是有原因的,但我一直没能找到它。
解决方案
推荐阅读
- c# - 是否有 C# 速记将值转换为其方法的返回类型?
- django - Django inspectdb 无法检查表 - 关系不存在错误
- java - 将两个对象创建到一个数组中
- google-cloud-firestore - Flutter Firestore ld:未找到架构 x86_64 的符号
- c# - 使用 Entity Framework Core 显示来自 2 个链接表的信息时出错
- php - 迄今为止的 PHP UTC 字符串
- javascript - chartjs 雷达发光边缘效果
- python - 读取没有代表行尾的字符的 txt 文件。如何遍历行
- c# - 不知道为什么这个单选按钮会引发错误?
- java - 我试图弄清楚如何打印我排序的这个数组列表