【问题标题】:AssemblyResolve always get raised, asking for MyAssembly.resourcesAssemblyResolve 总是被提出,要求 MyAssembly.resources
【发布时间】:2011-06-17 01:48:09
【问题描述】:

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

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

【问题讨论】:

    标签: .net wpf resources assemblies assembly-resolution


    【解决方案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】:

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

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

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

      更多信息:

      【讨论】:

        【解决方案3】:

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

        请参阅http://msdn.microsoft.com/en-us/library/e74a18c4.aspx 了解更多信息。

        【讨论】:

          猜你喜欢
          • 2016-03-27
          • 2013-09-26
          • 2023-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-01
          • 1970-01-01
          相关资源
          最近更新 更多