【问题标题】:How can I add metadata to resx files如何将元数据添加到 resx 文件
【发布时间】:2014-12-04 19:42:56
【问题描述】:

我想在解决方案中的所有 resx 文件中放入一些元数据。这似乎可以使用包含在 resx 文件的嵌入式 XSD 中的 metadata 元素来完成:

<xsd:element name="metadata">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="value" type="xsd:string" minOccurs="0" />
        </xsd:sequence>
        <xsd:attribute name="name" use="required" type="xsd:string" />
        <xsd:attribute name="type" type="xsd:string" />
        <xsd:attribute name="mimetype" type="xsd:string" />
        <xsd:attribute ref="xml:space" />
        </xsd:complexType>
</xsd:element>

我不能 100% 确定应该使用 metadata 元素来存储任意元数据,因为我找不到任何关于其预期用途的文档。但只要使用文本编辑器编辑 resx 文件,它就可以正常工作。

在 Visual Studio 2013 中编辑 resx 文件时出现问题。打开资源的默认方式是“托管资源编辑器”。不幸的是,托管资源编辑器不区分数据和元数据。这会导致元数据以静默方式更改为保存时的数据。自at least 2010 以来,此错误(或可能是故意设计)就已存在。

我们还尝试添加 Managed Resources Editor 无法识别的元素,但这些元素在保存时已被删除。 XML cmets 也发生了同样的事情。这种行为更容易理解,但并没有给我们留下很多好的选择。

以下是我知道的可能解决方案:

  1. 规定任何人都不能使用托管资源编辑器。如果只有我,这可能很好,但我不能要求整个团队都这样做。 Managed Resources Editor 这个工具太有用了。
  2. 要求每个人在使用托管资源编辑器后手动修复元数据。这太容易出错和繁重。
  3. 向 Visual Studio 团队提交问题。我们会这样做,但在等待期间我们需要一个解决方案,并且不能保证会出现修复。
  4. Fork Managed Resources Editor,使其按照我们想要的方式运行。我无法找到来源,这可能存在许可问题。我们也对维护分叉不感兴趣。
  5. 编写自己的托管资源编辑器版本。这与上面的选项类似,但对于我们的用例而言,工作量远远超过其价值。
  6. 只需将元数据存储在data 标记中。这是一个明显的 hack。

这里的失败似乎不是 resx 文件本身,而是与 resx 文件周围的 Visual Studio 工具有关。但是,我们不会很快离开 Visual Studio。有什么我缺少的解决方案吗?

【问题讨论】:

    标签: c# visual-studio internationalization resources resx


    【解决方案1】:

    我找不到将元数据添加到文件的良好解决方案。我最终采用了我提出的解决方案 #6:将元数据存储在 data 标签中。

    更具体地说,我们实质上是通过强制不允许任何资源文件使用密钥 ResxFileMetadata 来创建保留密钥名称。然后在需要元数据的 resx 文件中,我们添加了一个名为 ResxFileMetadata 且没有值的资源。实际的元数据以 JSON 格式存储在评论中。

    我们进一步规定,绝不允许代码专门读取ResxFileMetadata 资源。从 resx 文件创建字典的函数显式跳过ResxFileMetadata。这些指令基本上只是内部文档,它们不是由代码强制执行的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      相关资源
      最近更新 更多