如何将元数据添加到 resx 文件

本文关键字:resx 文件 添加 元数据 | 更新日期: 2023-09-27 18:33:13

我想在解决方案中的所有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文件时出现问题。打开资源的默认方法是"托管资源编辑器"。遗憾的是,托管资源编辑器不区分数据和元数据。这会导致元数据在保存时以静默方式更改为数据。这个错误(或者可能是有意设计(至少从 2010 年开始就存在了。

我们还尝试添加托管资源编辑器无法识别的元素,但这些元素在保存时被删除。XML 注释也发生了同样的事情。这种行为更容易理解,但并没有给我们留下很多好的选择。

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

  1. 强制要求任何人都不能使用托管资源编辑器。如果只有我,这可能没问题,但我不能要求整个团队都这样做。托管资源编辑器是一个非常有用的工具。
  2. 要求每个人在使用托管资源编辑器后手动修复元数据。这太容易出错和繁琐。
  3. 向 Visual Studio 团队提交问题。我们将这样做,但是我们在等待时需要一个解决方案,并且不能保证会修复。
  4. 分叉托管资源编辑器,使其按照我们想要的方式运行。我无法找到来源,这可能存在许可问题。我们对维护分叉也不感兴趣。
  5. 编写自己的托管资源编辑器版本。这就像上面的选项,但对于我们的用例来说,工作量要多得多。
  6. 只需将元数据存储在data标签中即可。这是一个明显的黑客。

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

如何将元数据添加到 resx 文件

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

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

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