我想在解决方案中将所有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注释也发生了同样的事情。这种行为更容易理解,但并没有给我们留下很多好的选择。
以下是我所知道的可能解决方案:
data
标记中即可。这是一个明显的黑客攻击。似乎这里的失败不是resx文件本身,而是围绕resx文件使用Visual Studio工具。但是,我们不会很快离开Visual Studio。我有什么解决方案吗?
答案 0 :(得分:0)
我无法找到向文件添加元数据的好方法。我最终使用我提出的解决方案#6:将元数据存储在data
标记中。
更具体地说,我们基本上通过强制不允许资源文件使用密钥ResxFileMetadata
来创建保留密钥名称。然后在需要元数据的resx文件中,我们添加了名为ResxFileMetadata
且没有值的资源。实际元数据在注释中存储为JSON。
我们进一步强制要求代码永远不允许专门阅读ResxFileMetadata
资源。从resx文件创建字典的函数显式跳过ResxFileMetadata
。这些任务基本上只是内部文档,它们不是由代码强制执行的。