ASP.NET应用程序未获取附属程序集

时间:2011-02-01 07:13:58

标签: asp.net satellite-assembly

我在App_GlobalResources文件夹中有一个名为“TestResourceApp”的Web项目,其中包含Labels.resx。我想通过创建一个附属程序集来添加另一种语言。

以下是我创建附属程序集的步骤。始终显示默认文本。我做错了什么?

1)在另一个文件夹中创建Labels.fr.resx。

2)生成资源文件:

Resgen Labels.fr.resx TestResourceApp.App_GlobalResources.Labels.fr.resources

3)生成附属装配:

AL / t:lib /embed:TestResourceApp.App_GlobalResources.Labels.fr.resources /out:french.dll / c:fr

4)将french.dll复制到TestResourceApp / bin / fr

我在web.config中将uiculture设置为auto,我在浏览器中更改了语言。

3 个答案:

答案 0 :(得分:3)

我能够使用此页面解决我遇到的一些卫星装配问题。我会再提几件事来检查。

反编译“中性”程序集并查看它是如何组合在一起的。像ILDASM.exe这样的工具有助于实现此目的。一旦你得到反编译,看看文本输出“.mresource”,你应该看到一个与你的命名。例如,如果将资源添加到Visual Studio项目,则将它们命名为MyAssemblyName +“.Properties.Resources”+一种语言(如果有)+“。resources”示例:

  

MyAssembly.Properties.Resources.resources(中性语言)   MyAssembly.Properties.Resources.en-US.resources(英语(美国))

就我而言,我的文件命名正确,并且在相应的文件夹中(例如Bin \ en-US)。我能够通过使用ProcMon.exe(由SysInternals人员)验证这一点,并且可以看到工作进程在我的DLL文件中查找和读取(而不是仅仅说“未找到路径”)。但是,它没有找到它所期望的名称的资源。那时某些反汇编有助于解决命名问题。

因此,请使用ProcMon.exe缩小您可能遇到的问题范围。希望这对某人有帮助。

答案 1 :(得分:1)

这很复杂但是对于遇到这个问题的人来说,这里有一些提示:

  • 尝试将resx包含在Web项目中,让VS为您完成工作。
  • Reflector是你的朋友。比较您创建的附件和VS创建的附件。
  • 如果您的Web应用程序是针对ASP.NET 2.0,则应使用.net 2.0附带的Resgex和AL。在Reflector中打开装配并检查“参考”。它应该引用mscorlib 2.0版。
  • 如果使用Web部署项目部署Web应用程序,请确保附属程序集中资源的名称空间正确无误。再次,与VS创造的比较。就我而言,我使用了错误的工具来生成designer.cs文件,因为我希望可以从不同的程序集访问它们。确保您使用的是GlobalResourceProxyGenerator。否则,名称空间将不匹配,部署代码将无法找到您的资源。 designer.cs中的命名空间应该只是“资源”,而不是“XXXX.App_GlobalResources”

答案 2 :(得分:0)

您是否在全球化中将enableClientBasedCulture设置为true