【发布时间】: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 也发生了同样的事情。这种行为更容易理解,但并没有给我们留下很多好的选择。
以下是我知道的可能解决方案:
- 规定任何人都不能使用托管资源编辑器。如果只有我,这可能很好,但我不能要求整个团队都这样做。 Managed Resources Editor 这个工具太有用了。
- 要求每个人在使用托管资源编辑器后手动修复元数据。这太容易出错和繁重。
- 向 Visual Studio 团队提交问题。我们会这样做,但在等待期间我们需要一个解决方案,并且不能保证会出现修复。
- Fork Managed Resources Editor,使其按照我们想要的方式运行。我无法找到来源,这可能存在许可问题。我们也对维护分叉不感兴趣。
- 编写自己的托管资源编辑器版本。这与上面的选项类似,但对于我们的用例而言,工作量远远超过其价值。
- 只需将元数据存储在
data标记中。这是一个明显的 hack。
这里的失败似乎不是 resx 文件本身,而是与 resx 文件周围的 Visual Studio 工具有关。但是,我们不会很快离开 Visual Studio。有什么我缺少的解决方案吗?
【问题讨论】:
标签: c# visual-studio internationalization resources resx