我正在开展一个项目,稍后会将本地化字符串插入到实时 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
最佳答案
这可能是因为您在生成法语本地化资源 DLL 时使用的命名空间与您的应用程序为资源文件使用的命名空间不同。
您必须将资源文件从 Strings.fr-FR.resources
重命名为 MyApplication.Namespace.Where.My.Resource.Files.Are.Located.Resources.fr-FR .资源
.
默认情况下,资源文件位于 Properties 文件夹中。这意味着您可以使用完全限定名称 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 生成的程序集的 list 。在第二种情况下,您将看到以下行 .mresource public 'MyApplication.Properties.Resources.fr-FR.resources'
,而在第一种情况下,它应该类似于 。 mresource public 'Strings.fr-FR.resources'
.由于您的应用程序在命名空间“MyApplication.Properties”中查找本地化字符串,因此无法找到它...当然,将“MyApplication.Properties.Resources”调整为应用程序中使用的任何内容(可能是“MyApplication.Localization” .字符串').
关于c# - 手动创建字符串资源文件不适用于应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13360901/