【问题标题】:Resource (RESX) files messed up资源 (RESX) 文件搞砸了
【发布时间】:2010-07-27 12:56:19
【问题描述】:

我有一个名为 Localize.resx 的资源文件,其中包含英文字符串。我将它复制并粘贴到同一个文件夹(App_GlobalResources)中,VS 创建了一个副本,我将副本重命名为 Localize.sl.resx,将原始副本重命名为 Localize.en.resx。现在代码隐藏文件 (Localize.en.designer.cs) 中的所有内容都消失了。删除设计器文件并选择运行自定义工具会生成一个新的但完全空白的设计器文件。

我在两个 resx 文件中仍然有我的所有字符串,但设计器文件已消失(为空),因此无法构建应用程序。

这是在带有 ASP.NET MVC 解决方案的 VS 2010 中。

【问题讨论】:

    标签: asp.net-mvc visual-studio visual-studio-2010 resources resx


    【解决方案1】:

    这就是ASP.NET documentation 所说的资源文件。

    它没有专门讨论动态生成的代码隐藏设计器文件,但如果您仔细阅读粗体文本,它本质上是说您需要没有指定语言的基本文件,鉴于此,只有这个文件是有道理的将包括自动生成的代码。

    "创建资源文件时,首先要创建一个基本的 .resx 文件。对于要支持的每种语言,创建一个具有相同文件名的新文件。但在名称中包含语言或语言和文化(文化名称)。有关文化名称的列表,请参阅 CultureInfo 类。例如,您可以创建以下文件:

    •WebResources.resx

    基础资源文件。这是默认(备用)资源文件。

    •WebResources.es.resx

    西班牙语的资源文件。

    •WebResources.es-mx.resx

    专门针对西班牙语(墨西哥)的资源文件。

    •WebResources.de.resx

    德语资源文件。"

    实际上我以前从未注意到这一点,但是当我去检查我的旧项目时,我发现它们都有基本文件,然后是特定于语言的文件。所以我只是更正它以遵循该约定,它现在可以工作了。

    【讨论】:

    • 是的,但只有一个具有相同根文件名的文件会生成自动设计器代码,即没有语言说明符的文件。这是有道理的,因为在您使用它的代码中,您只使用一个类名(假设我们谈论的是全局资源并且默认情况下它们位于 Resources 命名空间中)。
    • 对不起@mare,我错了:) resx 是包含字符串的“xml 类型”结构。不过,您很聪明,后面只有一个代码,该代码用于将 resx 链接到资源管理器。 ALTOOUUUGGHHH ... 它为每个 resx 生成一个 cs 文件(除了默认的都是空的)
    【解决方案2】:

    我遇到了同样的问题 - 某些 resx 文件不存在 Designer.cs 文件。

    解决方法是设置 resx 文件的属性:

    Build Action - Embedded Resource
    Custom Tool  - PublicResXFileCodeGenerator
    

    【讨论】:

      【解决方案3】:

      如果我是你,我会:

      创建一个新的 resx 文件; 打开旧的; 在旧的按 ctrl+a ; 在新的按ctrl+v; 保存新的; 删除旧的; 重命名新的:)

      这应该可以快速解决问题。 您还可以通过单击显示全部按钮来检查 cs 文件是否未从文件中排除

      【讨论】:

      • 你知道,这实际上一直有效,直到我重命名新文件的步骤,即 Resource1.resx 之前的内容,并且在将所有代码重命名为 Localize.sl.resx 之后,其设计器文件中充满了代码在设计器文件中消失了。
      • 嗯,奇怪的是,您的自定义工具设置为 GlobalResourceProxyGenerator。 @edit还要检查你是否删除了旧的,在你的windows文件夹中(在VS之外检查)你的旧resx和cs和设计器类被删除了。我认为它们仍然存在,但只是从您的 VS 项目中排除
      • 我发现这个点显然给他带来了麻烦,因为如果我将它重命名为 Resources54.resx 它工作正常。我认为 .lang 标识符 VS 正在尝试创建 Localize.sl 或 Localize.en 类,他当然不能。是的,那是我的自定义工具集。有什么想法吗?
      • 这很奇怪,我只是做了完全相同的步骤,在我的 App_Glob.. 中复制了一个 resx 并将其粘贴(使用 ctrl+c ctrl+v),然后将其重命名为 Localized.sl.resx没有问题。是否有任何网络服务器仍在从 Visual Studio 运行?如果是这样,请阻止他们。 (仍然相信可能有一些被排除的文件:))
      • 嗯,这太奇怪了。如果我将它重命名为 Localize.sl2.resx ,则设计器文件会很好地生成,其中包含一个类 sl2 但如果我将其命名为 Localize.sl.resx ,则设计器文件为空。 “sl”可能是 C# 中的保留字吗?
      【解决方案4】:

      很抱歉用这个来写评论。我的声誉实际上不到 50 =( 但我认为这也可能很重要。

      这指的是 Alvis 的回答: 你的解决方案成功了。但我还必须将基本设计器代码文件中属性的访问修饰符从内部修改为公共。否则我在尝试访问 xaml 中的 resx 时遇到 XmlParseExceptions。

      编辑: 所以这指的是 C#/WPF。在 ASP.NET 中可能会有所不同

      【讨论】:

        【解决方案5】:

        我发现最好的方法是:

        • 默认创建文件: Resource1.resx
        • 让它创建: Resource1.Desinger.cs
        • 将其重命名为您想要的语言,例如,Localize.en.resx

        任何其他方式对我来说刚刚停止创建 X.Designer.cs 文件

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-17
          • 2012-08-22
          • 2010-10-15
          • 2012-04-14
          相关资源
          最近更新 更多