2017年3月5日日曜日

【備忘録】 VB.NET DLL参照時のPublicKeyToken(公開キー)の作り方・調べ方・使い方

久しぶりにまともな投稿をします。
仕事中にドはまりした内容を、備忘録として残しておきます。

.dllを参照するには.exe以下のフォルダに置いておく必要があるけど
今回、.exeや.dllの保管場所は別々にする仕様だったので
先人たちが作ったapp.configの.dll参照欄に同じように
追記して、お客さんの好きなように参照パス変更できるように
すればいいやーって軽く思ってたんだけど

"PublicKeyToken"ってどこ見たら分かるんだ?、、、

ってなりました。
いくつか参考になりそうなWebページを見つけたんだけど
なかなか上手く取得できないまま2時間ほど潰してしまいました。

結果だけ言うと、VisualStudioをインストールした時に
”sn.exe”ってのができて、それを使えばいいらしい。

それを使って調べる方法を以下に記します。
(画像が粗く表示される場合は、ページの拡大を推奨。)



■環境
・Windows10 64bit
・VisualStudio2010 Express

まず、例として偶数かどうかを判断するための.dllを作成し
それを参照元のプログラムから呼ぶようにしました。



その際、.dllの参照先は.exe配下ではなく、.dll専用のフォルダとします。



.dllをコンパイルする際に、公開キー(厳密名)を作る必要がありますので
プロジェクトのプロパティから署名を選択し、キーファイルを作成します。

アセンブリの署名にチェックを入れ、新規作成を選んで、出てきたウィンドウに
キーファイルを入力します。
(パスワードはなくてもいけるっぽいので、下のチェックを外す。)



アプリケーションを選び、アセンブリ情報ボタンを押し、出てきたウィンドウの
"アセンブリをCOM参照可能にする"にチェックを入れる。
(会社の開発環境ではこれにチェックを入れないとPublicKeyTokenがnullだとか
っていうエラーが出たが、家の環境では出なかった。詳しくは分からん。)



後はコンパイルをして.dllを作成します。
作成した.dllは任意の場所に置いて、呼び出し元プログラム側から参照できる
ようにしていきます。

次に、呼び出し元プログラムのapp.configに記述するためのPublicKeyTokenを調べます。

Windowsキーを押して、すべてのプログラムから「Microsoft VisualStudio」→
「VisualStudio Tools」→ 「VisualStudo コマンドプロンプト」を開く
(Windows10での見方がわからないので、上の場所は記憶が曖昧、、、)

または、

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
(※赤文字以下は、環境によって異なります)の下にある"sn.exe"を開きます。



コマンドプロンプトが表示されたら、以下のように入力し、Enter。

sn -T DLLパス

例)
sn -T C:\Users\007\Desktop\VB\DLL\CheckDll.dll



そうすると、このように公開キーを取得することができます。

え?できなかったって?こんな風に表示されたって?



もしかして sn のオプションを -T ではなく -t ってやってるんじゃないですか?

無事公開キーを取得できたら、後は記述していくだけです。

呼び出し元のプログラムのapp.configにこのように記述していきます。



あとは呼び出し元のプログラムもコンパイルして終わり。

無事偶数チェックができました。







めでたしめでたし。

0 件のコメント:

コメントを投稿