7

我有一个 WPF 应用程序,并且我订阅了事件AppDomain.AssemblyResolve(只要运行时找不到程序集,就会引发此事件),我注意到它被调用了好几次,试图解析 MyAssembly.resources,其中 MyAssembly 是当前执行装配。它还对我从 MyAssembly 引用的库程序集提出了同样的要求(它要求 Library.resources)。

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

4

3 回答 3

7

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

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

虽然这是一种变通方法,但应仔细考虑多语言应用程序。

更多信息:

于 2011-02-12T09:53:21.880 回答
1

AssemblyResolve我们在事件处理程序中遇到了同样的问题。奇怪的是,我们只在 Windows XP 机器上看到了这个问题。我们的应用程序已本地化为多种语言,因此我们对使用NeutralResourcesLanguageAttribute. 我们的应用程序是为 .NET v3.5 编译的,但仍然受到为 .NET v4.0记录AssemblyResolve的更改的影响:

重要从 .NET Framework 4 开始,为所有程序集(包括资源程序集)引发 ResolveEventHandler 事件。在早期版本中,不会为资源程序集引发事件。如果操作系统是本地化的,则可能会多次调用处理程序:对于回退链中的每种区域性调用一次。

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

于 2012-04-05T18:15:34.453 回答
0

您可以使用 fuslogvw.exe 来查看 .Net 在哪里尝试查找您的依赖项。

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/e74a18c4.aspx

于 2011-01-28T08:49:11.363 回答