【问题标题】:Suppress "The resource name is not a valid identifier"禁止“资源名称不是有效标识符”
【发布时间】:2012-04-18 08:57:39
【问题描述】:

我有一个项目,其中包含 5000 多个资源字符串。几乎所有的标识符中都有句点。

我们正在切换到自动生成强类型类,当然,由于这些句点,我们会看到几千条警告

资源名称“blah”不是有效标识符。

我知道不是,生成器将句点更改为下划线,一切都很好。

我可以取消警告吗?它似乎没有与#pragma away 相关联的号码。

【问题讨论】:

  • 答案是“不”。而且由于我们无法更改键(我们的本地化挂起),我几乎被卡住了。

标签: .net visual-studio visual-studio-2010 embedded-resource


【解决方案1】:

这里一个非常糟糕的解决方法是将生成的代码与资源工具分离:

假设您的资源文件的名称是 Resources.resx

  1. 在 Visual Studio 中双击项目中的 Resources.resx 打开资源工具。

  2. 设置适合您正在使用的生成代码范围的访问修饰符。

  3. 在 Windows 资源管理器中,转到包含 Resources.resxResources.Designer.cs 代码的目录。 (手动浏览或右键单击您的项目/命名空间文件夹并选择“在 Windows 资源管理器中打开文件夹”)

  4. Resources.Designer.cs 重命名为 Resources.cs

  5. 回到 Visual Studio 中的资源工具,将访问修饰符设置为“无代码生成”

  6. 保存,关闭资源工具

  7. 单击解决方案资源管理器窗口顶部的“显示所有文件”图标。 Resources.cs 文件应与 Resources.resx 以幻像形式出现在同一文件夹中

  8. 右键单击Resources.cs并选择“包含在项目中”

警告现在应该消失了。当然,这种解决方法的不便之处在于,您必须在任何时候修改资源文件时执行所有这些步骤。

【讨论】:

    【解决方案2】:

    如果资源名称不是有效标识符(例如,它包含空格或“-”),并且为文件打开了强类型资源生成,则会出现此警告。这是警告而不是错误,因为强类型资源名称将更改为有效名称(例如,“ab”将更改为“a_b”),但资源名称将保持为“a b”。

    更正此错误

    如果可能,您应该首先将资源名称更改为有效的标识符。如果这不是有效选项,请禁用此 .resx 文件的强类型资源代码生成。为此,请在解决方案资源管理器中选择 .resx 文件并清除自定义工具属性。

    来源:http://msdn.microsoft.com/en-us/library/ms228672(v=vs.80).aspx

    【讨论】:

    • 如果我需要代码 (.Designer.cs) 并且根本无法重命名资源名称..??有没有其他解决方法..?
    【解决方案3】:

    我想我可以复制,尽管它在问题中并不是很明确。 Project + Properties, Resources 并键入一个字符串资源名称,如“foo.bar”会触发此警告。

    是的,您无法禁止显示此警告,它是由 IDE 中的资源设计器生成的。当它从 Properties\Resources.resx 文件自动生成代码到 Properties\Resources.Designer.cs 文件时。查看 .resx 文件并检查 <data> 元素上的“名称”属性。属性值中的句点将触发警告。

    用正则表达式精心设计的搜索和替换可以通过将句点变成下划线来解决这个问题。这给我个人带来了两个问题,我只需要编写一个使用 XDocument 的小程序。还要检查你是否仍然需要这个自动生成的代码,听起来你正在替换它。

    【讨论】:

    • 不,我们正在从手动反射转向自动生成的类。仅仅重命名是行不通的,因为我们有一个完整的 i18n 工具链来关闭这些标识符。叹息...
    • 这对我没有帮助。资源设计器生成的警告仍然是我最喜欢的解释。
    • 应该更清楚,我猜。除非有人想出解决方法,否则无论如何我都会给你赏金。
    【解决方案4】:

    这将抑制给定 .cs 文件的所有警告

    #pragma warning disable
    

    您还应该能够右键单击警告,然后单击“显示错误帮助”。它应该给出准确的警告编号,以便您可以通过进入项目属性、构建页面并将其输入到 Suppress Warnings 文本框来抑制整个项目的警告。

    经过进一步研究,似乎无法抑制某些警告。请参阅 msdn 上有关 /nowarn C# 编译器选项的详细信息 http://msdn.microsoft.com/en-us/library/7f28x9z3.aspx

    其中之一是编译器警告(级别 1)CS2029,它指的是您收到的“不是有效标识符”警告。您可以通过在此处访问 Compiler Warning (level1) CS2029 http://msdn.microsoft.com/en-us/library/878y1894.aspx 的详细信息来进一步确认它不能被抑制

    【讨论】:

    • .cs 文件是自动生成的。没有警告编号。
    • 不是2029,没有数字。 /W0 无效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多