より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

C#の大量のdllの差分をチェック

仕事で本番環境とソースの差分を調査したいということで作業をしていました。

一つのソリューションで全てのプロジェクトを管理しているわけでもないので、まず全てをビルドするバッチの作成に取り掛かりました。

循環参照も含まれるため、バッチを何周もしなければならないという。

差分を調査するdllをソースから生成したものの、dllの数はなんと400近く。

それでも

同僚A「それでも少ないほうだ」

同僚B「xxの商材は、1600」

というギョエーなことが

差分を調査する上で私が取った方法が

  1. WinMergeを使ってdllの差分があるもの以外は削除
  2. 差分があるものに対しては、それぞれのdllをdotPeekを使ってExport Assembly to Project
  3. Exportされて生成されたソースをWinMergeで比較

という方法。

他にも手段は検討してました。

  • JustAssembly -> フォルダごとアセンブリの差分を比較するツール。うってつけのツールでしたが、ソースの細かい違いがあると差分とみなされる。
  • dnSpy -> 一致するソースでもコメント部分や細かい部分で差分が多い。

dotPeekでデコンパイルした場合、ヘッダ部分に元dllのパスが埋め込まれる程度で、それ以外ではでコンパイル結果が一致しやすく、差分が少なくて調査しやすかったです。

Export Assembly to Projectはdll一つ一つに実行しないとなりませんし、ショートカットキーも使えません。なのでdllが300があったら300回同じ操作をしないとなりません。

f:id:rimever:20210210204818p:plain

それでも頑張れば午前中で作業は終わりました。

で、結果なのですが、差分を調査してくれと言われて覚悟はしていたものの、本番環境とdllの差分はありましたとさ、トホホ。

ソース管理は大事ですね。