如何向resx文件添加元数据

时间:2014-12-04 19:42:56

标签: c# visual-studio internationalization resources resx

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

<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文件时出现问题。打开资源的默认方式是&#34;托管资源编辑器&#34;。遗憾的是,托管资源编辑器不区分数据和元数据。这会导致元数据在保存时以静默方式更改为数据。自at least 2010以来,这个错误(或者可能是有意的设计)已经存在。

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

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

  1. 要求没有人可以使用托管资源编辑器。如果它只是我,这可能没问题,但我不能要求整个团队这样做。托管资源编辑器太有用了。
  2. 要求每个人在使用托管资源编辑器后手动修复元数据。这太容易出错并且很麻烦。
  3. 将问题提交给Visual Studio团队。我们将这样做,但是我们在等待的时候需要一个解决方案,并且无法保证不会出现修复。
  4. Fork托管资源编辑器,使其表现我们想要的方式。我无法找到源,这可能有许可问题。我们对维护叉子也不感兴趣。
  5. 编写自己的托管资源编辑器版本。这就像上面的选项一样,但是比我们的用例更有价值。
  6. 只需将元数据存储在data标记中即可。这是一个明显的黑客攻击。
  7. 似乎这里的失败不是resx文件本身,而是围绕resx文件使用Visual Studio工具。但是,我们不会很快离开Visual Studio。我有什么解决方案吗?

1 个答案:

答案 0 :(得分:0)

我无法找到向文件添加元数据的好方法。我最终使用我提出的解决方案#6:将元数据存储在data标记中。

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

我们进一步强制要求代码永远不允许专门阅读ResxFileMetadata资源。从resx文件创建字典的函数显式跳过ResxFileMetadata。这些任务基本上只是内部文档,它们不是由代码强制执行的。

相关问题