我正在开发一个项目,其中本地化的字符串稍后将插入到实时ASP.NET(MVC4)站点/应用程序中。我们计划实现此目的的方式(用于验证消息等)是从客户端获取字符串,将它们放在.resx文件中,将此.resx文件编译为.resources文件,然后编译为.dll。最后,此.dll将放置在实际站点的相关语言文件夹中。 但是,应用程序未捕获此手动创建的.dll。相反,它会回退到默认语言.dll。 另一方面,如果.resx文件是通过Visual Studio(2012)编译的,则应用程序可以很好地选择.dll,并显示来自它的本地化文本。
我猜测问题在于我手动创建.dll的方式,虽然我找不到它的任何问题。这是我在命令行控制台中运行的内容:
resgen Strings.fr-FR.resx Strings.fr-FR.resources
然后,
al /t:lib /culture:fr-FR /embed:Strings.fr-FR.resources /out:MyApplication.resources.dll
答案 0 :(得分:3)
这可能是因为在生成它时,法语本地化资源DLL中使用的命名空间与应用程序用于资源文件的命名空间不同。
您必须将资源文件从Strings.fr-FR.resources
重命名为MyApplication.Namespace.Where.My.Resource.Files.Are.Located.Resources.fr-FR.resources
。
默认情况下,资源文件位于“属性”文件夹中。这意味着您可以使用完全限定名称MyApplication.Properties.Resources.MyString
访问本地化字符串。
如果您的应用程序名为MyApplication,而您的资源文件位于Properties文件夹下,请以这种方式生成资源文件:
resgen Strings.fr-FR.resx MyApplication.Properties.Resources.fr-FR.resources
然后以这种方式生成DLL:
al /t:lib /Culture:fr-FR /embed:MyApplication.Properties.Resources.fr-FR.resources /out:MyApplication.resources.dll
现在,当您将它放在应用程序的bin文件夹中的fr-FR文件夹中时,应该将其识别出来。
查看先前生成的程序集的清单以及现在使用ildasm.exe生成的程序集。在第二种情况下,您会看到以下行.mresource public 'MyApplication.Properties.Resources.fr-FR.resources'
,在第一种情况下,它应该类似于.mresource public 'Strings.fr-FR.resources'
。由于您的应用程序在命名空间“MyApplication.Properties”中查找本地化字符串,因此无法找到它...当然,将“MyApplication.Properties.Resources”应用于应用程序中使用的任何内容(可能是“MyApplication.Localization” .Strings')。