当前位置:  开发笔记 > 编程语言 > 正文

如何比较多个.resx文件?

如何解决《如何比较多个.resx文件?》经验,为你挑选了5个好方法。

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



1> 小智..:

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



2> mdb..:

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

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



3> Ishmaeel..:

如果匹配的元素在两个文件中的显示顺序不同,则对XML文件使用简单的diff可能完全没有用。到目前为止,我也一直在寻找特定于XML的diff工具,但至今没有成功。

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

.resx在Visual Studio中打开文件。

全选[ Ctrl+ A]并剪切[ Ctrl+ X](大文件可能需要一段时间-请耐心等待)

粘贴[ Ctrl+ V]并保存(这将重新创建.resx按键排序的文件)

这样,当两个文件都重新排序后,正常的区分变得非常容易。您现在可以通过浏览差异快速找到丢失的键。



4> EF0..:

对于Visual Studio(2010+)的较新版本,现在有一个名为ResXManager的Visual Studio扩展(由tomenglert创建),为此感到惊讶。

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



5> zhaorufei..:

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

    的xmldiff

    Araxis

    Altova DiffDog

    XML记事本

    ExamXML

    Liquid XML Studio 2009(有一个XML diff菜单,但只有许可证版本可以使用它.所以我没有机会尝试一下)

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

    XmlDiff是我尝试过的第一个工具.看起来它可以做我想要的,但是在下载源代码(Visual Studio 2003)并使用Visual Studio 2005编译(成功自动升级)后,我可以顺利地编译小项目.但是,当我比较两个真实.resx文件(1295行)时,它崩溃了.对代码的修改并没有给我一个关于发生了什么的线索,因为我没有源代码xmldiffpatch.dll XmlDiffPatch.View.dll.

    我之所以没有尝试深入研究这个工具是输出格式还是GUI设计.它输出一个HTML文件,其中差异在Internet Explorer托管的窗口中突出显示.对于大型XML文件差异,它并不容易使用.

    XML Notepad有一个简单的内置XML差异.根据输出窗口,我认为它在内部使用XmlDiff的组件.输出与XmlDiff相同.我会卸载它.

    Araxis更像是一种传统的文本差异工具,它还可以比较二进制文件,图像文件,文件夹和word文件.我非常喜欢 XML 之外的任何diff任务,因为它没有支持XML的diff选项支持.

    Altova DiffDog看起来像一个复杂的商业产品,它确实包含一个忽略元素顺序的选项,这是我的关键功能.

    但是在尝试使用相同的真实.resx文件(1295行,根据我的经验不是很大)之后,我发现如果两个元素位于两个文件中的非常不同的位置,那么"忽略元素顺序"就不能正常工作.

    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显示我们如何通过data/@对resx文件进行排序LINQ的name属性.太奇妙了.核心代码只有一个由几个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修订比较.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有