powerdee.com
Google
 
このサイト内 Web
 
カウンタ

アセンブリについて

アセンブリとは…

.NET Framework(CLR)における基本的な単位で、配布する際の単位となる。 アセンブリはファイルシステムにおける物理的な単位ではなく、論理的な単位として存在する。

詳細は下記の記事を参照。 解説 インサイド .NET Framework [改訂版]

以下は、実際に運用で環境を準備する際の手順を記す。 VisualStudio .NET 2003 の C# が前提。 ※但し、勉強不足の為間違った個所がある可能性があるので、ご注意ください。

VusialStudio .NET 2003では、シングルファイルアセンブリとしてビルドが行われる。 (プロジェクトに対して1つのアセンブリになる)

<プロジェクト名>\bin\<プロジェクト名>.dll

アセンブリの内容

  • アセンブリマニフェスト
  • 型メタデータ
  • MSIL(Microsoft Intermediate Language) …実行される中間コード
  • リソース

マニフェストに含まれるもの

  • アセンブリの名前(アイデンティティ)
  • アセンブリに含まれる各モジュールが参照している外部のアセンブリの情報
  • アセンブリに含まれる各モジュールが外部に公開している型の情報
  • アセンブリを構成しているファイル(モジュール)の情報

アセンブリの名前には、主に次の情報が含まれる

  • 名前(簡易名)…デフォルトでは、プロジェクト名になる。
  • バージョン
  • カルチャ
  • 公開キー

アセンブリ名の設定はプロジェクトディレクトリに含まれる「AssemblyInfo.cs」で行う。

バージョン:
 [assembly: System.Reflection.AssemblyVersion("1.0.0.0")]  <-- デフォルトは「1.0.*」
カルチャ:
 [assembly: System.Reflection.AssemblyCulture("")]  <-- なにも指定しない(neutral)
公開キー:
 [assembly: System.Reflection.AssemblyKeyName("CspContainer")]  <-- 任意のCSPコンテナ名

秘密鍵で署名を行う手順【厳密名のアセンブリ】

  1. 秘密キー/公開キー・ペアの作成

sn.exeに“-k”オプションを付けて、ファイル名を指定すると、キー・ペアを作成してファイルに出力することができる。拡張子は、snkとする。

% sn.exe -k myKey.snk
  1. キーペアをコンテナに格納する

次のように“-i”オプションでファイルとCSPコンテナを指定 (CspContainerは任意のCSPコンテナ名を指定する)

% sn.exe -i myKey.snk CspContainer
  1. コンテナに格納したキーペアファイルは削除する。
% del myKey.snk
  1. AssemblyInfo.csのAssemblyKeyNameにコンテナ名を指定する。
 [assembly: System.Reflection.AssemblyKeyName("CspContainer")]
  1. AssemblyInfo.csのAssemblyKeyNameにコンテナ名を指定する。
 [assembly: AssemblyTitle("")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("")]
 [assembly: AssemblyCopyright("")]
 [assembly: AssemblyTrademark("")]

 [assembly: AssemblyVersion("1.0.*")]   <-- "*"にしておくと、リビジョンを自動的に割り振る。
  1. ビルド

ただし、上記の手順はコンパイルする際にキーペア(公開キーと秘密キーのペア)が必要になる為、複数人数開発時にはシステムの出荷直前の最終段階で秘密キーを用いた署名を行う。この手順を「遅延署名]と呼ぶ。

遅延署名の手順

  1. 秘密キー/公開キー・ペアの作成
% sn.exe -k myKey.snk
  1. キーペアをコンテナに格納する

次のように“-i”オプションでファイルとCSPコンテナを指定

% sn.exe -i myKey.snk CspContainer
  1. コンテナに格納したキーペアファイルは削除する。
% del myKey.snk
  1. CSPコンテナから公開キーのみを含むファイルを出力する。
% sn -pc CspContainer myKeyPublic.snk
  1. AssemblyInfo.csの下記の設定を行う。
 [assembly: System.Reflection.AssemblyKeyFile("myKeyPublic.snk")] <-- 公開キーを指定
 [assembly: System.Reflection.AssemblyDelaySign(true)] <-- 遅延署名を行う

 [assembly: AssemblyTitle("")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("")]
 [assembly: AssemblyCopyright("")]
 [assembly: AssemblyTrademark("")]

 [assembly: AssemblyVersion("1.0.0.0")]   <-- メジャー番号"1"以外は"0"にする。※理由は…
  1. ビルド
  1. 署名を無効化する

このままで実行すると、CLRのセキュリティチェックが行われ、秘密キーで署名していない為エラーとなる。 以下のコマンドを打ち込み、開発中のモジュールの署名の検証を無効にする。

% sn.exe -Vr sample.dll <-- マニフィストを持っているファイル名を指定する(例はsample.dll)

※ AssemblyVersion("1.0.*")にしておくと、ビルドの度にバージョンが変わってしまう為、上記のコマンドをその都度実行する必要がでてきてしまう。その為、開発時はAssemblyVersion("1.0.0.0")としておく。

  1. 遅延署名アセンブリへの署名

開発が終了し、最終段階のアセンブリが完成したら、秘密キーを用いて実際の署名作業を行う。

% sn.exe -Rc sample.dll CspContainer
  1. 署名検証機能の再有効化

手順7で無効化した署名を再度有効化する。

% sn.exe -Vu sample.dll

おすすめ書籍


Visual Studio 2005 ASP.NET 2.0 Webアプリケーション開発 Programming Technique

著者:PROJECT KySS
出版社:メディアテック出版(2006-10)
価格:¥3,864(税込)
ASP.NETでいってみよう (DB Magazine SELECTION)

著者:松本 美穂、百田 昌馬
出版社:翔泳社(2005-03-23)
価格:¥2,730(税込)


ページTopへ / ▲Homeへ