web-dev-qa-db-ja.com

コンパイルされた.NETアセンブリを比較しますか?

.NETアセンブリのコンパイルと比較できる優れたプログラムはありますか?

たとえば、HelloWorld.dll(1.0.0.0)とHelloWorld.dll(2.0.0.0)があります。違いを比較したいのですが、どうすればよいですか?

.NET ReflectorとAssembly Diffプラグインを使用できることはわかっています。これを行うための他の良いツールはありますか?

48
Danny G
43

二つの方法。

ILDASMを使用して、従来のツールと比較できます。

または、その機能にコストがかかるNDependsを使用することもできます。

[P#からC#への拡張。]

24
rama-jka toti

同じバージョンの同じDLLの2つのリビジョンを比較するだけでした(小さな修正プログラムを実装し、DLLを本番環境に展開する必要がありましたが、他の変更がコードにリークしました。理想的には、Assemby Diffアドインで違いを表示したいのですが、機能しません(DLLをそれ自体と比較していると思われます) )これが私がしたことです:

  • 逆アセンブルされたソースファイルを保持する2つのフォルダーを作成しました。
  • ReflectorExportオプション(コンテキストメニューから)を使用して生成しました前の手順で作成されたフォルダー内の各DLLからのソースファイル.
  • 無料の DiffMerge ツールを使用して2つのディレクトリを比較しました。ツールは私に変更されたファイルと違いを示しました。

それは少し賢いですが、動作するようです。ただし、Assembly Diffアドインが機能することを願っています。

更新:Assembly Diffアドインの最新バージョンは、同じアセンブリの2つのバージョンを比較する問題を修正することになっています。試してみる。

11
Alek Davis

ツール NDepend は、.NETコードdiffを処理するための多くの機能を提供します。 免責事項:私はツールの開発者の1人です

パネルSearch by Changeは、アセンブリコードの相違の参照専用です。次のことに注意してください。

  • NDependにプラグインして、メニューで使用されるコード差分ツールを比較できますソースファイルの古いバージョンと新しいバージョンを比較します
  • ソースコードがなく、生のアセンブリのみの場合は、オプションがありますリフレクターで逆アセンブルされた古いバージョンと新しいバージョンを比較します

NDepend Search by Diff Panel

スクリーンショットで、差分を参照するために CQLinqコードクエリ が生成されていることにも注意してください。

from m in Application.Methods 
where m.CodeWasChanged() 
select new { m, m.NbLinesOfCode }

他にも多くのデフォルトのdiffクエリとルールがデフォルトで提案されており、.NETコードのdiffをスマートに閲覧できます。

もう1つのオプションは、Microsoftの LibCheck です。

パブリックAPIの差分を取得するためのかなり古いコンソールツール。デバッグせずに実行し、より新しい.netバージョンに再ターゲットすることはできませんでした。ただし、非常に明確な出力が得られたので、後で使用します。

記事 とスクリーンショットを示します。

1
Eugene