【问题标题】:adding custom column resx file添加自定义列 resx 文件
【发布时间】:2009-10-28 19:05:03
【问题描述】:

这听起来像是一个不寻常的问题,但我很好奇如何在 resx 文件设置中添加一个额外的列(所以我会有类似“名称、值、评论、foo”之类的内容)

我在网上环顾四周,还没有听说其他人尝试过这样的事情,但我认为通过编写一个新的 resx 阅读器和编写器来做到这一点是可能的。只是想知道是否有人对此问题有任何见解,主要是我打算使用它来存储消息并使用存储在资源文件中的优先级记录它们(在这种情况下为列 foo)

【问题讨论】:

  • 感谢 Mikael 在这一点上,即使我无法制作自定义阅读器和编写器,所以 Visual Studio 允许我拥有额外的专栏,我可以修改架构,所以只要我不打开 Visual Studio 编辑器(我真的很想这样做。)如果有人对如何为 3 列或更多列 resx 文件生成工作读取器/写入器有任何更多的意见,我将不胜感激跨度>
  • 我编辑了我的答案。在我看来,内置的 VS 编辑器被锁定为默认的 resx 格式。

标签: c# resx


【解决方案1】:

您可以使用 XML 编辑器打开 resx 文件并修改架构,但 Visual Studio 中的内置 resx 编辑器将删除您手动添加到架构中的任何列。

但是通过创建自己的阅读器应该是可能的。

[编辑] 我从 .Net 框架中复制了 ResXResourceReader/Writer,但是当我将它们添加到 .resx 文件时,.Net 中的托管资源编辑器会引发错误。我最好的建议是在架构中添加一个新列并使用另一个编辑器,例如 http://madskristensen.net/post/A-NET-resource-editor-application-for-resx-files.aspx 中的编辑器。只需修改代码以说明您的额外列。

【讨论】:

  • 有没有办法覆盖默认的 Visual Studio 编辑器?如果可能的话,使用编辑器会很好,但如果需要,我可以编写自己的小应用程序来处理新列。我主要关心“Visual Studio 将删除您添加的任何列”部分,因为我不希望它只是删除日志记录优先级或可能添加的任何其他内容。
  • 我的回答有点为时过早。由于 resx 文件中对 System.Resources.ResXResourceReader 和 System.Resources.ResXResourceWriter 的引用,它们被删除。如果您继承这些或在您自己的阅读器/编写器中实现 IResourceReader 并将 dll 放入 GAC,我相信您可以扩展架构并添加另一列。
  • 看来我得先解决这个问题,运气好的话几天后会回来检查你的答案。
  • 我通过反射器查看了当前的读写器,我认为您可以提取代码并基于它创建自己的代码。继承它似乎更难,因为您要覆盖的许多方法都是私有的。这个周末我可能有时间进一步研究它,除非你决定使用 resx 以外的其他东西。为什么需要 .resx 格式?
  • 这是为了简单起见,我在这个项目上与我一起工作的人需要能够编辑信息/消息存储的信息,目前使用数据库,但需要一段时间才能绕过我们的源代码控制过程进行更改。有人要求我通过 resx 文件来实现它,我需要使用超过 3 列才能使其工作(同时避免一些更糟糕的实现方法。)
【解决方案2】:

尝试使用简单的命名系统来存储“名称”的键值对,例如:

name->"value"
name-comment->"comment value"
name-foo->"foo value"

这可以让您为“新列”存储任意数量的名称-键->值对。

如果您的要求更加复杂和微妙,那么请考虑编写自己的资源读取器/写入器。

另外,这听起来像是您有一个与数据库表更匹配的要求。考虑使用SQLite 作为数据存储,可能。

【讨论】:

  • 你对数据库的想法是正确的,我实际上正试图摆脱这种想法,因为它将应用程序移植到需要存储数据的其他机器上会变得更加困难。
  • SQLite 可以嵌入到您的应用程序中。您可以轻松地在机器之间移动它(或移动它的数据文件),而无需任何额外的安装步骤。但是,您失去了使用资源文件的所有好处...坚持我的第一个建议!
  • 请记住,使用 resx 文件的另一个原因是我们想要使我们的产品国际化。
  • 然后使用我建议的命名系统。如果 msft 将来更新 resx 功能,您可以保证它将与您的升级工作相兼容。
  • 是的,不幸的是,这也是我想出的解决方案,它会起作用,我只是希望我可以建立一些官方专栏,但事实证明这很困难,因为我还需要一个自定义字典类来支持额外的值列。
猜你喜欢
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 2019-03-18
  • 2013-11-21
  • 2015-04-29
相关资源
最近更新 更多