【问题标题】:How to use compiled global resources in ASP.NET MVC如何在 ASP.NET MVC 中使用已编译的全局资源
【发布时间】:2010-12-23 08:47:58
【问题描述】:

我想将 App_GlobalResources/Strings.resx 编译到我的程序集中(并最终为 Strings.es.resx、Strings.fr.resx 等使用附属程序集。 ) 但应用发布后会出现以下错误:

“无法加载文件或程序集‘App_GlobalResources’或其依赖项之一。系统找不到指定的文件。”

复制步骤:

  1. 创建一个新的 ASP.NET MVC 项目。
  2. 添加一个 App_GlobalResources 文件夹和一个 Strings.resx 文件。
  3. 将文件的构建操作设置为“嵌入式资源”
  4. 将字符串添加到 Strings.resx 并在 HomeController.Index() 中使用它,例如ViewData["Message"] = Strings.MyTest
  5. F5 调试,工作正常。
  6. 发布到 IIS 并且(因为 Strings.resx 被排除在发布之外)您将在发布的站点中收到上述错误。

ASP.NET MVC 项目可以使用编译到 dll 中的字符串资源吗?如果可以,我做错了什么?


更新:这是我在 Reflector 中看到的:

那么为什么ResourceManager 没有找到它们呢?默认情况下不应该是fallback to the main assembly吗?

【问题讨论】:

    标签: asp.net-mvc localization embedded-resource


    【解决方案1】:

    这是一个很好的起点http://odetocode.com/Blogs/scott/archive/2009/07/16/resource-files-and-asp-net-mvc-projects.aspx

    我像您提到的那样设置了一个项目,并且在部署到 IIS6 时遇到了完全相同的错误。根据 Scott 的建议,将 Custom Tool 更改为 PublicResXFileCodeGenerator 并将 Custom Tool Namespace 更改为 Resources 即可解决问题。

    在消除 App_GlobalResources 方面,我也会效仿 Scott 的做法,但我让它工作得很好。这可能是个人喜好问题。

    【讨论】:

    • 优秀的答案!效果很好。谢谢。
    • @w0rd-driben,我已经构建了一个包含 globalresource 的程序集1,并且在您发布时是公开的,但是在另一个项目中使用此程序集并使用代码时:“ “不工作......有什么想法吗?谢谢
    • @w0rd-driven,我在链接stackoverflow.com/questions/1222519/… 中找到了解决方案,再次感谢
    【解决方案2】:

    关于 PublicResXFileCodeGenerator 可能还需要了解一件事 - 它不适用于文件名中包含多个点的文件(请参阅 http://social.msdn.microsoft.com/Forums/ru-RU/9412f049-acd8-4a77-b73a-f3810df18376/naming-resources-files-issue-aspnet-mvc-3?forum=dlr)。因此,Strings.es.resx、Strings.fr.resx 等的代码隐藏保持为空。简单的解决方案是重命名文件。

    【讨论】:

      猜你喜欢
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      相关资源
      最近更新 更多