前書き
.NETのアプリケーションは、参照先のアプリケーションが持つ厳密名を使ってアプリケーションの同一性(ID)を判別することで、同一名称を持つバージョンの異なるアプリケーションの利用を可能にしている(side-by-side実行)。
厳密名とは
厳密名とはアプリケーションごとに設定されてた以下の4つの情報で決定している。
- アセンブリ名
- バージョン番号 (注:アセンブリバージョンのことで、アセンブリ情報バージョンではない)
- カルチャ
- public key(実際はpublic keyから作成されたハッシュ値であるpublic key tokenを利用しているらしい)
アセンブリ名はそのdllの名称そのままであるが、それ以外の項目はそれぞれ調べ方が異なるので注意したい。
バージョン番号、public keyの調べ方
Visual Studioに付属するツールildasmを利用して、dllのmanifestを確認する
Manifest内の、.assembly <アセンブリ名> セクションに記載されている(以下の例では、アセンブリ名は System.Net.Http)、.publickey及び.verがそれぞれpublic key、バージョンンに対応する。
カルチャの調べ方
対象dllを右クリックし、プロパティを開くと、詳細タグで言語を確認することができる。
まとめ
DLL同士の比較を行う際に、単純なバイナリファイルの比較を行うと差分が生じてしまうが、実際には同じ「ID」を持つDLLとして配布されているケースが多くありうる。
これは、内部実装などに差が生じているDLLでもインターフェースが同じであれば同様に参照して利用できるようにするためであるが、どこで同一IDであることを確認すればいいのかが不安になった場合には、以上のような方法で確認が可能してみるのも一つの手である。