MVC App_GlobalResources,使用本地和发布

时间:2016-10-07 22:27:53

标签: c# asp.net-mvc app-globalresources

我遇到GlobalResources的问题

  1. 我创建了App_GlobalResources文件夹
  2. 添加User.resx
  3. Add Name =“FirstName”,Value =“First name”
  4. 默认我不能在我的MVC项目中使用这些资源。 我试过了:

    • App_GlobalResources.User.FirstName - 无法正常工作
    • Resources.User.FirstName - 它工作但只有代码隐藏,当构建和启动应用程序(本地)时,显示错误:
      

    Niemożnapurbraćwłaściwości“Name”,ponieważlokalizacjaniepowiodłasię。 Typ“Resources.Users”nie jest publiczny lub nie zawiera publicznej,statycznejwłaściwościciąguonazwie“FirstName”。

    它的翻译是:

      

    由于位置失败,无法检索属性“名称”。类型“Resources.Users”不是公共的,或者不包含名为“FirstName”的公共静态属性。

    然后我更改了User.resx属性:

    • 构建操作:嵌入式资源
    • 复制到输出:目录不要复制
    • 自定义工具:PublicResourceProxyGenerator
    • 自定义工具命名空间:“空”

    现在我无法使用 Resources.User.FirstName 我必须 useApp_GlobalResources.User.FirstName

    我很高兴它的工作。但昨天是我第一次在测试服务器上发布,而且资源不能正常工作......

    文件不会复制到服务器......

    我更改User.resx属性

    • 构建操作:内容
    • 复制到输出:目录不要复制
    • 自定义工具:GlobalResourceProxyGenerator
    • 自定义工具命名空间:“空”

    复制文件,但是应用程序会抛出我之前共享的相同的先前异常,并且资源在localmachine中不起作用,有什么建议吗?

3 个答案:

答案 0 :(得分:2)

感谢您的帮助

我做了:

  1. 创建文件夹资源
  2. 将所有资源从App_GlobalResources移至新文件夹
  3. 更改所有文件属性:
  4. 构建操作:嵌入式资源

    复制到输出:始终复制

    自定义工具: PublicResXFileCodeGenerator

    自定义工具命名空间:资源

    此设置允许我将Access Modifier resx文件更改为Public。

    现在项目在本地机器上工作。 发布期间的文件resx正在处理serwer。 服务器应用程序正常工作。

答案 1 :(得分:1)

考虑以下关于资源的说明:

将资源文件添加到ASP.NET项目的App_GlobalResources特殊文件夹时,GlobalResourceProxyGenerator自定义工具将用于您的资源,它将生成internal类在Resources程序集中的App_GlobalResources命名空间中,用于管理资源。

  • 这些资源是内部资源,无法更改其访问修饰符。
  • 它们不能用于[Display]或验证属性等数据注释属性

  • 可以通过调用Resources.ResourceFile.ResourceProperty直接在View或代码中使用它们。

使用ResXFileCodeGenerator作为自定义工具的嵌入式资源将在名称空间中生成公共资源文件,该名称空间是默认名称空间+文件夹层次结构。

  • 默认情况下,这些资源是公开的,但您可以使用设计器更改它们的访问修饰符。您还可以通过更改其Custom Tool Namespace属性

  • 在自定义命名空间中生成它们
  • 它们可用于数据注释属性,如[Display]或验证属性。

  • 可以通过调用SomeNamespace.ResourceFile.ResourceProperty直接在View或代码中使用它们。

答案 2 :(得分:-1)

打开资源文件,将访问修饰符更改为public并且不要将其作为嵌入资源,因为这将生成另一个具有项目程序集名称和附加.resources后缀的程序集,这将使其难以实现您可以在部署后更改任何资源值,使其不嵌入并复制到输出目录,以便以后可以选择更改resx文件而无需部署dll。