我正在将某些软件从.NET 2迁移到4.5.1。该应用程序包含一个主程序和一个DLL(让我们称之为gem install -N riemann-dash
)。主程序和dll都由加载器应用程序加载(通过foo.dll
和AppDomain.AssemblyResolve
)。
转到4.5.1后,只要我的代码触及嵌入式资源,运行时就会尝试加载Assembly.Load
,由于没有这样的文件,它显然无法找到。这只有在我通过我的加载器运行时才会发生。如果我直接运行它就可以正常工作。
知道这里发生了什么吗?
答案 0 :(得分:1)
似乎AppDomain.AssemblyResolve
在.NET 4.0中的工作方式发生了变化。来自ResolveEventHandler
的{{3}}页面:
从.NET Framework 4开始,将为所有程序集(包括资源程序集)引发System.ResolveEventHandler事件。在早期版本中,未针对资源程序集引发事件。如果操作系统已本地化,则可能会多次调用该处理程序:对于后备链中的每个文化都会调用一次。
所以这里看起来似乎是运行时正在寻找资源/附属程序集,只是以防它们在那里。以前不存在为可能不存在的东西引发处理程序的情况。由于这一变化,现在的解决方案是简单地返回null而不是抛出。