AssemblyResolve总是被引发,要求MyAssembly.resources

时间:2011-01-28 06:54:44

标签: .net wpf resources assemblies assembly-resolution

我有一个WPF应用程序,并且我订阅了事件AppDomain.AssemblyResolve(每当运行时找不到程序集时都会引发此事件),并且我注意到它会多次尝试解析MyAssembly.resources,其中MyAssembly是当前正在执行的程序集。它还对我从MyAssembly引用的库程序集问了同样的事情(它要求Library.resources)。

这是正常的吗?我如何解决它?我的应用确实有问题。它无法加载位于库中的某些xaml用户控件。这有关系吗?

3 个答案:

答案 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