我有一个WPF应用程序,并且我订阅了事件AppDomain.AssemblyResolve(每当运行时找不到程序集时都会引发此事件),并且我注意到它会多次尝试解析MyAssembly.resources,其中MyAssembly是当前正在执行的程序集。它还对我从MyAssembly引用的库程序集问了同样的事情(它要求Library.resources)。
这是正常的吗?我如何解决它?我的应用确实有问题。它无法加载位于库中的某些xaml用户控件。这有关系吗?
答案 0 :(得分:7)
将此行添加到AssemblyInfo.cs中,不会再向您的解析器询问资源。
[assembly: NeutralResourcesLanguageAttribute("en-US", UltimateResourceFallbackLocation.MainAssembly)]
虽然这是一种解决方案,但应该仔细考虑多语言应用程序。
更多信息:
答案 1 :(得分:1)
我们遇到了AssemblyResolve
事件处理程序的同样问题。奇怪的是,我们只在Windows XP机器上看到了这个问题。我们的应用程序已本地化为多种语言,因此我们对使用NeutralResourcesLanguageAttribute
犹豫不决。我们的应用程序是针对.NET v3.5编译的,但仍然受到.NET v4.0的AssemblyResolve
更改documented的影响:
重要从.NET Framework 4开始,为所有程序集引发ResolveEventHandler事件,包括 资源集合。在早期版本中,未引发该事件 资源集合。如果操作系统已本地化,则为处理程序 可能被多次调用:对于后备中的每种文化都会被调用一次 链
我们解决这个问题的方法是检查e.Name
并查看它是否在寻找* .Resources.dll。如果在AppDomain或已知文件夹中找不到该文件,我们将删除“.Resources”并查找* .dll。如果该文件存在,我们加载并返回该程序集。这解决了我们的问题。
答案 2 :(得分:0)
您可以使用fuslogvw.exe查看.Net正在尝试查找您的依赖项。
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/e74a18c4.aspx。