2008年6月6日金曜日

.NET 自作のアセンブリのインストールで、[参照の追加]ダイアログに表示するには?

自作アセンブリのインストーラで、GAC登録を行い、レジストリを追加することで、ツールボックスの「アイテムの選択」ダイアログや「参照の追加」ダイアログに自作アセンブリを表示することができます。

自作アセンブリに厳密名をつける


例えばMyControlsクラスライブラリにMyTextBox、MyComboBoxを作成したとします。
このMyControlsクラスライブラリに厳密名をつけます。

※厳密名をつけることで以下のようなメリットがあります。
メリット1:参照DLLが改竄されていないことを証明する
メリット2:GACに登録することができるようになる
メリット3:コードアクセスセキュリティで厳密名による設定が可能になる
詳しくはアセンブリ署名とコードアクセスセキュリティを参照してください。

VS2005で厳密名をつける手順は簡単です。
MyControlsクラスライブラリのプロパティページの署名タブを開きます。
アセンブリの署名チェックボックスをチェックONにし、コンボボックスより新規作成を選択します。


厳密な名前のキー作成ダイアログが表示されますので、キーファイル名とパスワードを入力します。


ソリューションエクスプローラに、厳密な名前のキー作成ダイアログで指定したキーファイル名.pfxファイルが追加されます。


セットアッププロジェクトを作成します。


ソリューションにセットアッププロジェクトを追加します。
セットアッププロジェクトのプロパティを必要に応じて変更してください。


続いて「アプリケーションフォルダ」を右クリックし「追加」→「プロジェクト出力」を選択ます。


表示された「プロジェクト出力グループの追加」ダイアログより「プライマリ出力」を選択します。




GAC登録


「対象コンピュータ上のファイルシステム」を右クリックし「特別なフォルダの追加」より「グローバルアセンブリキャッシュフォルダ」を選択します。
依存関係のあるdllをGACに登録する場合、グローバルアセンブリキャッシュに依存関係のあるdllを含め、アプリケーションフォルダにはプライマリ出力だけになるようにします。
手順はグローバルアセンブリキャッシュにプライマリ出力を行った後、アプリケーションフォルダにプロジェクト出力を行います。



「グローバルアセンブリキャッシュフォルダ」を右クリックし「追加」→「プロジェクト出力」を選択ます。


表示された「プロジェクト出力グループの追加」ダイアログより「プライマリ出力」を選択します。


レジストリの追加


まず自PCのレジストリを確認します。
「スタート」→「ファイル名を指定して実行」をクリックし、「regedit」と打ち込んで「OK」をクリックしレジストリエディタを起動してください。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFoldersを確認してください。
ここに自作コントロールライブラリMyControlsを作成することにより、GACに登録されていれば、ツールボックスのアイテムの選択ダイアログに表示されるようになります。

確認できたらVSの作業に戻ります。
ツールメニューの「表示」→「エディタ」→「レジストリエディタ」をクリックしレジストリエディタを起動します。


HKEY_LOCAL_MACHINEを右クリックし「新しいキー」で下記構成になるようにキーを作成します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\[ProductName]


[ProductName]を右クリックし「新規作成」→「文字列の値」を選択します。
Nameプロパティは空値、Valueプロパティは[TARGETDIR]とします。


以上でインストーラの作成は終了です。


動作確認


MyControlsのインストールを行います。

C:\WINDOWS\assemblyフォルダ内にMyControlsがあるかどうか確認します。


レジストリエディタを起動し、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFoldersにMyControlsが作成され、インストールパスが正しいか確認します。


VSを起動しWindowsアプリケーションを作成します。
ツールボックスを右クリックし「アイテムの選択」をクリックします。
「ツールボックス アイテムの選択」ダイアログにMyTextBoxとMyComboBoxが表示されている事を確認します。

0 件のコメント: