7

我正在开发一个项目,稍后将本地化字符串插入到实时 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
4

1 回答 1

3

这可能是因为在生成法语本地化资源 DLL 时使用的命名空间与应用程序用于资源文件的命名空间不同。

您必须将资源文件从 重命名Strings.fr-FR.resourcesMyApplication.Namespace.Where.My.Resource.Files.Are.Located.Resources.fr-FR.resources.

默认情况下,资源文件位于 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 生成的程序集。在第二种情况下,您将看到以下行.mresource public 'MyApplication.Properties.Resources.fr-FR.resources',而在第一种情况下,它应该是这样的.mresource public 'Strings.fr-FR.resources'。由于您的应用程序在命名空间“MyApplication.Properties”中查找本地化字符串,因此找不到它......当然,将“MyApplication.Properties.Resources”调整为您的应用程序中使用的任何内容(可能是“MyApplication.Localization” .Strings')。

于 2012-11-17T13:25:00.667 回答