2 つ (またはそれ以上) の大きな .resx ファイルの内容を比較するにはどうすればよいですか? 各ファイルには何百もの名前と値のペアがあるため、結合されたバージョンを表示すると非常に役立ちます。ニュートラル カルチャに存在するが、カルチャ固有のバージョンでも指定されていない名前/値のペアに特に興味があります。
7 に答える
一度に複数の言語を表示し、不足しているものや余分なものを明確に確認できるresxファイルを編集するための優れたフリーウェアツールがあります-Zeta Resource Editor
Visual Studio (2010+) の新しいバージョンには、ResXManager ( tomenglert によって作成された)と呼ばれる Visual Studio 拡張機能があり、これは驚くべきことです。
各リソースを各言語で並べて表示し、不足しているリソースを強調表示できます。(以下の例は、拡張機能のダウンロード ページからのものです。)
それ自体は差分ツールではありませんが、RESX Synchronizerがここで役立つ場合があります。その主な用途は、ローカライズされた .resx ファイルをニュートラル言語の新しいエントリで更新し、削除されたアイテムを削除することです。
おそらく、/v コマンド ライン スイッチを使用して生成される出力が、必要なものになるでしょう。それ以外の場合は、完全な C# ソース コードが付属しているため、必要に応じて調整できます。
XML ファイルで単純な diff を使用しても、一致する要素が両方のファイルで同じ順序で表示されない場合、まったく役に立たない可能性があります。私も XML 固有の diff ツールを探していましたが、これまでのところ成功していません。
その間、私が使用している回避策は次のとおりです。
.resxVisual Studioでファイルを開きます。- [ + ] をすべて選択し、[ Ctrl+ A] を切り取ります (大きなファイルの場合、これには時間がかかる場合があります。しばらくお待ちください)。CtrlX
- [ Ctrl+ ] を貼り付けて保存します (これにより、キーでソートされVたファイルが再作成されます)
.resx
このように両方のファイルを並べ替えると、通常の diff が非常に簡単になります。差分をざっと見て、不足しているキーをすばやく見つけることができます。
いくつかの XML 差分ツールを試しました。要約は次のとおりです (私がそれを評価するようになった要件は、Visual Studio で生成された.resxリソース ファイルを比較することでした。これは、Microsoft が作成した大きな欠点だと思います。要素の順序はランダムであり、Windows フォームは常に ImageStream を書き換えます。ボタンの位置を変更するだけで、imageList で何もしない場合)。
- XmlDiff
- アラシス
- Altova DiffDog
- XML メモ帳
- 試験XML
- Liquid XML Studio 2009 (XML diff メニューはありますが、ライセンス版しか使用できないため、試す機会がありません)
まず第一に、通常の diff ツールはすべて考慮すべきではありません。なぜなら、それらは XML について何も知らず、テキスト ファイルを単なるテキスト行として扱うからです。
XmlDiff は、私が最初に試したツールです。必要に応じて実行できるように見えますが、ソース コード ( Visual Studio 2003 ) をダウンロードし、Visual Studio 2005 でコンパイルした後 (自動アップグレードに成功)、小さなプロジェクトをスムーズにコンパイルできます。しかし、2 つの実際の
.resxファイル (1295 行) を比較すると、クラッシュしました。のソース コードがないため、コードをデバッグしても何が起こったのかわかりませんxmldiffpatch.dll XmlDiffPatch.View.dll。そして、私がこのツールを掘り下げようとしなかった理由は、出力形式、つまり GUI の設計でした。Internet Explorer がホストするウィンドウで強調表示された相違点を含む HTML ファイルを出力します。大きな XML ファイルの diff の場合、これを使用するのは簡単ではありません。
XML メモ帳には、単純な組み込みの XML diff があります。出力ウィンドウによると、内部で XmlDiff のコンポーネントを使用していると思います。出力は XmlDiff と同じです。アンインストールします。
Araxis は従来のテキスト diff ツールよりもはるかに優れており、バイナリ ファイル、画像ファイル、フォルダー、および Word ファイルも比較できます。XML を意識した差分オプションがサポートされていないため、XML以外のあらゆる差分タスクで非常に気に入っています。
Altova DiffDog は複雑な商用製品のように見えますが、要素の順序を無視するオプションが含まれていました。これは私にとって重要な機能です。
しかし、同じ実際の
.resxファイル (1295 行、私の経験では大きなものではない) で試してみたところ、2 つの要素が 2 つのファイル内の非常に異なる場所にある場合、「要素の順序を無視する」がうまく機能しないことがわかりました。 .ExamXML は商用製品のように見えますが、小さな製品です。しかし、試してみると、現時点で私の期待に最も理想的なツールであることがわかりました。
F10がっかりした側面もあります。次の違いに移動するために押したときにクラッシュしました。要素の順序を無視するオプションはうまく機能します。無視された要素のカスタマイズがそれほど柔軟ではないという残念な点が 1 つあります。
label1.Size
label1.Location
label1.Width
名前に「.Size」または「.Location」または「.Width」が含まれるこれらの要素の違いをすべて無視したいのですが、そのような条件を同時に定義することはできません。カスタマイズは正規表現をサポートしていません。
とにかく、ExamXML を (慎重に) 使用して XML ファイルを比較します。
更新 1: 何年も経ちましたが、現在は VS2017 を使用しており、この質問に対する最初の回答以来、winform は変更されていません。仕事をさまざまな人に分割する必要があるとき、この問題が何度も何度も飛び出し、退屈しました。
実際、私はこの答えを忘れていました。グーグルが私をここに連れてきました。
私は新しい調査セッションを開始し、いくつかの良い発見を しました: LINQ による name 属性。すごい。コア コードは、複数の LINQ で構成される 1 つのステートメントのみです。
次に、このスレッドの別の回答で指摘されている ResXResourceManager も発見しました。著者は上記のコード プロジェクトの記事に返信し、ResXResourceManager に機能を追加しました。ResxResourceManager では、resx ファイルを自動的にソートするようにプラグインを設定できます前) 構成タブに保存します。選択できる並べ替えオプションもあります: CurrentCulture、Ordinal、IgnoreCase など。
残念ながら、コード プロジェクト ソリューションと ResXResourceManager ソリューションでは異なる結果が生成されます。ソースが利用可能です。コード プロジェクト ソリューションでは ">>" 属性値を通常のテキストとして表示するため、意味的に関連するウィジェットが分離されます。これは、TrimStart('>') を LINQ に追加することで簡単に修正できます。
ただし、これを修正した後でも、2 つのツールは異なる結果を生成します。犯人は、デフォルトでCurrentCultureを使用して文字列をソートするLINQであり、resXResourceManagerのrevelantソートオプションを完全に無視します。この問題については、最適なソートオプションは「序数」だと思います。コード プロジェクト ソリューションに並べ替えオプションを追加し、ResXResourceManager で同じ並べ替えオプションを設定すると、最終的にまったく同じ結果が得られます。
resxResourceManager はリソースを一元管理し、resx 要素の順序の問題を修正するのに優れていますが、コード プロジェクト ツールはスタンドアロンであるため、より幅広いケースで使用できるため、私にとっては非常に貴重です。さらに、コードは非常に簡潔でエレガントです。
更新の最後に別のメモを追加します。私は亀の git を使用し、Araxis を使用して異なるバージョンを比較します。2 つの 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 は前方を意味し、最初のファイル名は入力ファイル、2 番目のファイル名はフィルターが書き込む出力ファイル、3 番目のファイル名は無視しても問題ありません。コード プロジェクト コードに少し変更を加えた後、フィルター プログラムをコンパイルして Araxis で構成し、古くてめちゃくちゃになった resx ファイルに対しても適切な resx リビジョン比較を行うことができるようになりました。
XML差分を使用して何かをコーディングできます。アプリケーションでのXML差分およびパッチツールの使用を参照してください。
TortoiseSVN の diff のようなツールを使用できます (Windows を使用している場合)。両方のファイルを選択して右クリックし、TortoiseSVN サブメニューから「差分」を選択します。
