0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Windowsアプリケーション(DLL)の同一性を確認する方法

Posted at

前書き

.NETのアプリケーションは、参照先のアプリケーションが持つ厳密名を使ってアプリケーションの同一性(ID)を判別することで、同一名称を持つバージョンの異なるアプリケーションの利用を可能にしている(side-by-side実行)。

厳密名とは

厳密名とはアプリケーションごとに設定されてた以下の4つの情報で決定している。

  • アセンブリ名
  • バージョン番号 (注:アセンブリバージョンのことで、アセンブリ情報バージョンではない)
  • カルチャ
  • public key(実際はpublic keyから作成されたハッシュ値であるpublic key tokenを利用しているらしい)

アセンブリ名はそのdllの名称そのままであるが、それ以外の項目はそれぞれ調べ方が異なるので注意したい。

バージョン番号、public keyの調べ方

Visual Studioに付属するツールildasmを利用して、dllのmanifestを確認する

image.png

Manifest内の、.assembly <アセンブリ名> セクションに記載されている(以下の例では、アセンブリ名は System.Net.Http)、.publickey及び.verがそれぞれpublic key、バージョンンに対応する。

image.png

カルチャの調べ方

対象dllを右クリックし、プロパティを開くと、詳細タグで言語を確認することができる。

image.png

まとめ

DLL同士の比較を行う際に、単純なバイナリファイルの比較を行うと差分が生じてしまうが、実際には同じ「ID」を持つDLLとして配布されているケースが多くありうる。

これは、内部実装などに差が生じているDLLでもインターフェースが同じであれば同様に参照して利用できるようにするためであるが、どこで同一IDであることを確認すればいいのかが不安になった場合には、以上のような方法で確認が可能してみるのも一つの手である。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?