2011-01-28 38 views
6

我有一个WPF应用程序,并订阅事件AppDomain.AssemblyResolve(只要运行时没有找到程序集就会引发此事件),并且我发现它尝试多次尝试调用解决MyAssembly.resources,其中MyAssembly是当前正在执行的程序集。它还要求我从MyAssembly引用的库程序集(它要求提供Library.resources)的同样的事情。AssemblyResolve总是得到提出,要求MyAssembly.resources

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

回答

7

将此行添加到您的AssemblyInfo.cs中,您的解析器将不会再被要求获取资源。

[assembly: NeutralResourcesLanguageAttribute("en-US", UltimateResourceFallbackLocation.MainAssembly)] 

虽然这是一个解决方法,应该认真考虑多语言应用。

更多信息:

1

我们遇到了同样的问题与AssemblyResolve事件处理程序。奇怪的是,我们只在Windows XP机器上看到这个问题。我们的应用程序已本地化为多种语言,因此我们犹豫使用NeutralResourcesLanguageAttribute。我们的应用程序被编译为.NET v3.5版本,但仍然受着AssemblyResolve变化documented为.NET V4.0:

重要从.NET Framework 4开始,ResolveEventHandler事件引发适用于所有组件,包括 资源组件。在较早的版本中,不会为 资源组件提出该事件。如果操作系统已本地化,则可能会多次调用处理程序 :对于后备 链中的每个区域,都会执行一次。

我们解决这个问题的方法是检查e.Name并查看它是否正在查找* .Resources.dll。如果该文件未在AppDomain或已知文件夹中找到,我们将删除“.Resources”并查找* .dll。如果该文件存在,我们加载并返回该程序集。这解决了我们的问题。