如何比较多个.resx文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何比较多个.resx文件?相关的知识,希望对你有一定的参考价值。

如何比较两个(或更多)大.resx文件的内容?每个文件中有数百个名称/值对,查看组合版本非常有用。我对中性文化中存在的名称/值对特别感兴趣,但在文化特定版本中也没有指定。

答案

有一个伟大的免费软件工具来编辑resx文件,你可以一次看到多种语言,清楚地看到缺少或额外的 - Zeta Resource Editor

另一答案

虽然它本身不是一个差异工具,但RESX Synchronizer可能会帮助你。它的主要用途是使用中性语言中的新条目更新本地化的.resx文件,并删除所有已删除的项目。

可能,使用/ v命令行开关生成的输出将是您所需要的。否则,它确实带有完整的C#源代码,因此您可以根据需要调整它。

另一答案

我尝试了几种XMl diff工具。这是总结(推动我评估它的要求是为了区分Visual Studio生成的.resx资源文件,我认为这是微软制造的一个大错误 - 元素的顺序是随机的,Windows Forms总是重写如果您只是更改按钮的位置而不对imageList执行任何操作,则为ImageStream。

  1. 的xmldiff
  2. Araxis
  3. Altova DiffDog
  4. XML Notepad
  5. ExamXML
  6. Liquid XML Studio 2009(有一个XML diff菜单,但只有许可证版本可以使用它。所以我没有机会试一试)

首先,不应考虑所有正常的diff工具,因为它们对XML一无所知,它们将文本文件视为文本行。

  1. XmlDiff是我尝试过的第一个工具。看起来它可以做我想要的,但在下载源代码(Visual Studio 2003)并使用Visual Studio 2005编译(成功自动升级)后,我可以顺利地编译小项目。但是,当我比较两个真正的.resx文件(1295行)时,它崩溃了。由于我没有xmldiffpatch.dll XmlDiffPatch.View.dll的源代码,因此对代码的修改并不能让我知道发生了什么。 我之所以没有尝试深入研究这个工具是输出格式还是GUI设计。它输出一个html文件,其中差异在Internet Explorer托管的窗口中突出显示。对于大型XML文件差异,它并不容易使用。
  2. XML Notepad有一个简单的内置XML差异。根据输出窗口,我认为它在内部使用XmlDiff的组件。输出与XmlDiff相同。我会卸载它。
  3. Araxis更像是一种传统的文本差异工具,它还可以比较二进制文件,图像文件,文件夹和word文件。我非常喜欢除XML之外的任何diff任务,因为它没有支持XML的diff选项支持。
  4. Altova DiffDog看起来像一个复杂的商业产品,它确实包含一个忽略元素顺序的选项,这是我的关键功能。 但是在尝试使用相同的真正的.resx文件(1295行,根据我的经验不是很大)之后,我发现如果两个元素位于两个非常不同的位置,那么“忽略元素顺序”就不能正常工作文件。
  5. ExamXML看起来像商业产品,但它是一个小产品。但在尝试之后,我发现它是目前最理想的工具,符合我的期望。

还有一个令人失望的一面:当我按下F10导航到下一个区别时,它崩溃了。忽略元素选项顺序很有效。遗憾的是,忽略元素的定制不是那么灵活。

label1.Size
label1.Location
label1.Width

我想忽略名称中包含“.Size”或“.Location”或“.Width”的这些元素的所有差异,但不可能同时定义这样的条件。自定义不支持正则表达式。

无论如何,我将使用ExamXML(小心)来比较XML文件。

更新1:过去了几年,现在我使用VS2017并且自从我对这个问题的初步回答以来winform没有改变。当工作需要分解给不同的人时,这个问题一次又一次地出现,让我感到厌烦。

其实我忘记了这个答案,谷歌把我带到了这里。

我开始了一个新的调查会议,并得到了一些很好的发现:https://www.codeproject.com/Articles/37022/Solving-the-resx-Merge-Problem表明我们可以通过LINQ的data / @ name属性对resx文件进行排序。太奇妙了。核心代码只有一个由几个LINQ组成的语句。

然后我还发现ResXResourceManager,这个线程中的另一个答案指出,作者回复了上面的代码项目文章并将该功能添加到ResXResourceManager,在ResxResourceManager中,你可以配置插件来自动排序resx文件时(之前)您将其保存在配置选项卡中。甚至可以选择排序选项:CurrentCulture,Ordinal或IgnoreCase等。

不幸的是,代码项目解决方案和ResXResourceManager解决方案产生了不同的结果,源代码可用,我发现代码项目解决方案处理“>>”属性值作为普通文本,因此语义相关的小部件是分开的。通过向LINQ添加TrimStart('>')可以很容易地解决这个问题。

然而,在固定之后,这两个工具仍然产生不同的结果。 culprint默认使用CurrentCulture来排序字符串LINQ,我完全忽略了resXResourceManager中的indlant sort选项,对于这个问题,我认为最好的排序选项是“Ordinal”。将sort选项添加到代码项目解决方案,并在ResXResourceManager中设置相同的排序选项后,最终它们会产生完全相同的结果!

尽管resxResourceManager非常适合集中管理资源并修复resx元素顺序问题,但代码项目工具对我来说仍然非常宝贵,因为它是独立的,因此它可以在更广泛的情况下使用;此外,代码非常简洁优雅。

我会在我的更新结尾添加另一个注释,我使用togise git,我使用Araxis来比较不同的版本,比较两个resx文件修订几乎没有意义,但是,Araxis支持自定义过滤器来转换输入文件在比较引擎看到它之前。为了进行比较,Araxis通过以下命令调用过滤器:sortresx.exe -f C: Users ADMINI~1 AppData Local Temp mrg.8032.3.resx C: Users ADMINI~1 AppData Local Temp mrg.8032.2 C: Users ADMINI~1 AppData Local Temp mrg.8032.4

-f表示foward,第一个文件名是输入文件,第二个文件名是过滤器应该写的输出文件,第三个文件名可以安全地忽略。在对代码项目代码进行一些更改之后,我现在可以编译一个过滤器程序,将其与Araxis进行对比,并对旧的,混乱的resx文件进行合理的resx修订比较。

另一答案

如果匹配元素在两个文件中的出现顺序不同,那么在XML文件上使用简单的diff就完全没用了。我一直在寻找一种特定于XML的差异工具,到目前为止还没有成功。

与此同时,我一直在使用的解决方法是:

  • 在Visual Studio中打开.resx文件。
  • 选择全部[Ctrl + A]并剪切[Ctrl + X](对于大文件可能需要一段时间 - 请耐心等待)
  • 粘贴[Ctrl + V]并保存(这将重新创建按键排序的.resx文件)

当这两个文件因此被重新排序时,正常的差异变得更加容易。您现在可以通过浏览差异来快速找到丢失的键。

另一答案

对于较新版本的Visual Studio(2010+),现在有一个名为ResXManager的Visual Studio扩展(由tomenglert创建),这对此非常了不起。

它允许您并排查看每种语言中的每个资源,并突出显示缺少的资源。 (以下示例来自扩展下载页面。)

Example From Extension Download Page

另一答案

您可以使用XML Diff编写代码。见Using the XML Diff and Patch Tool in Your Applications

另一答案

您可以使用TortoiseSVN的差异工具(如果您使用的是Windows)。只需选择两个文件,右键单击,然后从TortoiseSVN子菜单中选择“diff”。

以上是关于如何比较多个.resx文件?的主要内容,如果未能解决你的问题,请参考以下文章

WINFORM 如何利用代码动态把资源加入到resources.resx

如何创建 resx 文件

如何在 javascript 文件中使用 resx 文件。 .net 核心 3.1 mvc

如何继承资源文件(resx)

如何在单个 EXE 中嵌入多语言 *.resx(或 *.resources)文件?

如何对 . .NET 中的 resx(资源文件)