c# - 手动创建字符串资源文件不适用于应用程序

标签 c# asp.net-mvc visual-studio-2012

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

相关文章:

c# - 这是协方差问题吗?不确定是否砖墙

asp.net - Html.Encode 不返回任何内容

c# - 如何将编码的 Web 性能测试添加到 visual studio 2012 中的负载测试

unit-testing - Web 应用程序的 Visual Studio 2012 编码 UI 测试 - 代码覆盖率

c# - 如何将 JSON 数组转换为 C# 列表?

c# - Visual Studio的Windows Style中的图标的图标路径在哪里

asp.net-mvc - ASP.Net MVC 3中的多项目区域

c# - 如何在asp.net core的路由属性中设置正则表达式的匹配超时

winforms - Visual Studio 2012 中的 Tab 键顺序分配对话框在哪里?

c# - 跨不同程序集的函数参数