如何比較兩個(或更多)大型.resx文件的內容?在每個文件中有數百個名稱/值對,查看組合版本會非常有幫助。我對中性文化中存在的名稱/值對特別感興趣,但也沒有在文化特定版本中指定。如何比較多個.resx文件?
回答
有編輯RESX文件,在那裏你可以看到一次多國語言,並清楚地看到什麼是缺少或額外的一個偉大的免費軟件工具 - Zeta Resource Editor
您可以使用像TortoiseSVN的差異(如果您使用Windows)的工具。只需選擇兩個文件,右鍵單擊,然後從TortoiseSVN子菜單中選擇「diff」。
如果在兩個文件中匹配的元素沒有以相同的順序出現,那麼對XML文件使用簡單的差異可能完全沒有用處。我一直在尋找一個XML特定的diff工具,迄今爲止沒有成功。
在此期間,我一直在使用的解決辦法是這樣的:
- 打開
.resx
文件在Visual Studio中。 - 選擇所有[Ctrl鍵 + 甲]和切[Ctrl鍵 + X](這可能需要一段時間對於大文件 - 是患者)
- 粘貼[Ctrl鍵 + V ]和保存(這將重新創建
.resx
文件通過關鍵字排序)
當兩個文件都因此重新排序,正常diff'ing變得非常容易。您可以通過瀏覽diff來快速找到丟失的鍵。
雖然它本身不是一個差異工具,但RESX Synchronizer可能會幫助你。它的主要用途是使用中性語言的新條目更新本地化的.resx文件,並刪除所有已刪除的項目。
也許,通過使用/ v命令行開關生成的輸出可能是您需要的。否則,它會附帶完整的C#源代碼,因此可能可以根據您的需要進行調整。
您可以使用XML Diff進行編碼。見Using the XML Diff and Patch Tool in Your Applications。
我試過幾個與XML比較工具。以下是總結(促使我評估它的要求是區分Visual Studio生成的資源文件,我認爲這是Microsoft犯的一個重大錯誤 - 元素順序是隨機的,Windows窗體始終會重寫ImageStream,如果你只是改變一個按鈕的位置,而對imageList不做任何事情)。
- 的xmldiff
- Araxis
- Altova DiffDog
- XML Notepad
- ExamXML
- Liquid XML Studio 2009(有一個XML DIFF菜單,但只有一個許可證版本可以使用它,所以我沒有機會給試試看)
首先,不應該考慮所有普通的差異工具,因爲他們對XML一無所知,他們將文本文件視爲文本行。
XmlDiff是我試過的第一個工具。看起來它可以滿足我的需求,但是在下載源代碼(Visual Studio 2003)並使用Visual Studio 2005(通過成功的自動升級)編譯後,我可以順利編譯這個小型項目。但是當我比較兩個真實的
.resx
文件(1295行)時,它崩潰了。在代碼中調試並不能讓我知道發生了什麼,因爲我沒有xmldiffpatch.dll XmlDiffPatch.View.dll
的源代碼。而我之所以沒有嘗試挖掘更多這個工具是輸出格式或GUI設計。它會輸出一個HTML格式的文件,並在Internet Explorer的 窗口中突出顯示差異。對於一個大的XML文件差異,使用起來並不容易。
XML記事本有一個簡單的內置XML差異。根據輸出窗口,我認爲它在內部使用XmlDiff的組件。輸出與XmlDiff相同。我會卸載它。
Araxis是更傳統的文本比較工具,它也可以比較二進制文件,圖像文件,文件夾和Word文件。對於任何差異任務,除了 XML之外,我非常喜歡它,因爲它沒有支持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 表明,如何eaisly我們可以按數據的RESX文件/ @通過LINQ name屬性。太奇妙了。核心代碼只是一個由幾個LINQ組成的語句。
然後我還發現ResXResourceManager,這是由該線程中的另一個答案指出的,作者回復了上面的代碼項目文章,並將此功能添加到ResXResourceManager中,ResxResourceManager中,您可以配置插件以自動排序resx文件時(之前)將其保存在配置選項卡中。甚至還有一個排序選項可供選擇:CurrentCulture,Ordinal或IgnoreCase等。
不幸的是,代碼項目解決方案和ResXResourceManager解決方案產生了不同的結果,源代碼可用,我發現代碼項目解決方案將「 & gt; & gt;「屬性值作爲普通文本,因此語義相關的小部件是分開的。這可以通過在LINQ中添加一個TrimStart('>')來修復。
但是,固定後這兩個工具仍然會產生不同的結果。 culprint是LINQ默認使用CurrentCulture對字符串進行排序,而我完全忽略了resXResourceManager中的相關排序選項,對於這個問題,我認爲最好的排序選項是「Ordinal」。將代碼項目解決方案中的排序選項添加並在ResXResourceManager中設置相同的排序選項後,最終它們會產生完全相同的結果!
儘管resxResourceManager非常適合集中管理資源並修復resx元素順序問題,但代碼項目工具對我來說仍然非常重要,因爲它是獨立的,因此可以在更廣泛的情況下使用它;此外,代碼非常簡潔優雅。
我會在我的更新結尾添加另一個註釋,我使用toolkit 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表示前進,第一個文件名是輸入文件,第二個文件名是輸出文件過濾器應寫入,第三個可以安全地忽略。在對代碼項目代碼做了一些改動之後,我現在可以編譯一個過濾程序,在Araxis中對其進行配置,並且對舊的,混亂的resx文件進行合理的resx修訂比較。
對於較新版本的Visual Studio(2010+),現在有一個名爲ResXManager的Visual Studio擴展(由tomenglert創建),這對於此非常了不起。
它允許您並排查看每種語言中的每個資源並突出顯示缺少的資源。 (以下示例來自擴展下載頁面。)
- 1. 如何使用多個RESX文件
- 2. 多文件比較
- 3. 一次用Vista比較多個文件?
- 4. 比較4個或更多文件
- 5. 比較多個文件中的值
- 6. 多列文件比較
- 7. 如何比較兩個.mp4文件?
- 8. Concordion:如何比較兩個文件?
- 9. 如何比較兩個.csv文件?
- 10. 如何比較兩個wav文件?
- 11. Python如何比較兩個文件行
- 12. MongoDB:如何比較兩個文件?
- 13. git如何比較文件?
- 14. 如何比較XML文件
- 15. 如何比較CHM文件
- 16. 如何比較類文件
- 17. 如何比較dll文件
- 18. Python:如何比較fasta文件中的多個序列?
- 19. 如何比較和合並多個文件?
- 20. 如何比較Windows中多個文件的內容
- 21. 比較內容中有多個文件的兩個文件夾
- 22. C# - 比較多個文件和另外一個文件
- 23. 如何將多個字符串粘貼到.net .resx文件中?
- 24. 如何解決比較2個文件的文本和比較的問題
- 25. Excel - 比較兩個文件?
- 26. 比較兩個文件
- 27. 比較2個文件夾
- 28. 比較兩個文件
- 29. 比較兩個文件
- 30. 比較2個XML文件
根本真棒。 thx – Konstantinos 2009-09-24 12:27:05
RESX同步器已停產,但他們現在推薦使用[http://amanuens.com/](http://amanuens.com/),該版本可免費使用至2011年12月31日,看起來非常棒! – Luuk 2011-11-03 09:16:02