解説

インサイド .NET Framework [改訂版]

第2回 アセンブリのアイデンティティ

吉松 史彰
2003/07/02 改訂(改訂前の記事はこちら

Page1 Page2 Page3 Page4 Page5

 本稿は、2002/05/16に公開された記事を、.NET Frameworkの新しいバージョンである「.NET Framework 1.1」に対応させ、全面的に加筆・修正を行った改訂版です。

はじめに

Back Issue
1
マネージ・コード/アセンブリ/モジュール

 今回より、CLRがアセンブリをロードして実行するまでを解説する。だがその前に、前回で解説しなかった、重要な点を解説しなければならない。それは、アセンブリの名前(アイデンティティ)についてである。

アセンブリの名前

 アセンブリをロードしたり、ほかのアセンブリを参照したりするためには、アセンブリを指定しなければならない。アセンブリは、前回書いたとおり論理的なもので、実体はない。だから、アセンブリの名前はファイル名ではないし、物理的な情報(配置場所など)は一切含まれていない。

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

  • 名前(簡易名)
  • バージョン
  • カルチャ
  • 公開キー

 名前の部分は、通常はコンパイラやアセンブリ・リンカが自動的に付ける。コンパイラはほとんどの場合、出力ファイル名に基づいてこの名前を決定する。

 バージョンの部分には、このアセンブリのバージョンを指定する。バージョンは、メジャー、マイナー、ビルド、リビジョンの各部に分かれている。この番号はファイルのバージョンとは関係なく、自分で自由に付けることができる。

 カルチャの部分には、このアセンブリが特定のカルチャ(言語などの情報)に特化したリソースを保持している場合に、それを指定する。“ja-JP”や“en-US”などが指定できる。この情報は、実行コードが入っているアセンブリには指定しない。カルチャに特定の情報が指定されている場合、そのアセンブリはサテライト・アセンブリと呼ばれ、特定のカルチャに特化したリソースだけが含まれるアセンブリとなる。

 公開キーの部分には、このアセンブリに署名をしたときに使用した秘密キーと対になっている公開キーの情報が入る。公開キーの部分が存在する名前のことを、厳密名(Strong Name)と呼んでいる。

アセンブリの命名

 アセンブリに名前をつけるのは開発者の役目だ。開発者は、アセンブリの名前のうち簡易名を除く3つの部分については次のように指定することができる。

■ソース・コードに名前を埋め込む

 ソース・コードに、アセンブリ・レベルの属性として次のように指定する。

[assembly: System.Reflection.AssemblyVersion("1.0.0.0")]
[assembly: System.Reflection.AssemblyCulture("")]
[assembly: System.Reflection.AssemblyKeyName("CspContainer")]
C#/JScript .NET
 
<assembly: System.Reflection.AssemblyVersion("1.0.0.0")>
<assembly: System.Reflection.AssemblyCulture("")>
<assembly: System.Reflection.AssemblyKeyName("CspContainer")>
Visual Basic .NET
 
[assembly: System::Reflection::AssemblyVersion("1.0.0.0")];
[assembly: System::Reflection::AssemblyCulture("")];
[assembly: System::Reflection::AssemblyKeyName("CspContainer")];
C++ マネージ拡張

/** @assembly System.Reflection.AssemblyVersion("1.0.0.0")*/
/** @assembly System.Reflection.AssemblyCulture("")*/
/** @assembly System.Reflection.AssemblyKeyName("CspContainer")*/
J#

 名前で分かるとおり、上からバージョン、カルチャ、公開キー(が入っているCSPコンテナ)を指定している(CSPコンテナについては後述)。ソース・コードに属性の名前をいきなり書いてしまうと、その属性がどのレベルに適用されるのかが分からなくなってしまうので、「assembly:」と指定してこれがアセンブリに対して適用される属性であることを示している。このようなスコープ制限としては、ほかに「module:」や「return:」などがある。

 「AssemblyKeyName属性」に指定しているものについての解説はこのあとで行う。

■アセンブリ・リンカ al.exeを利用する

 アセンブリ・リンカである“al.exe”を使ってアセンブリを作るときには、アセンブリの名前の4つの部分をコマンドライン・オプションで指定することができる。アセンブリの名前のうち、簡易名は「/outスイッチ」で指定したファイル名の拡張子を取り除いたものになる。そのほかの3つは次のとおりだ。

% al.exe /out:<名前>.dll /version:1.0.0.0 /keyname:CspContainer <モジュールファイル>


 INDEX
  解説 インサイド .NET Framework [改訂版]
  第2回 アセンブリのアイデンティティ
  1.アセンブリの名前
    2.厳密名とアセンブリ
    3.署名のないアセンブリ
    4.遅延署名したアセンブリを試す
    5.アセンブリの名前の参照
 
インデックス・ページヘ  「解説:インサイド .NET Framework [改訂版]」

@IT Special

- PR -

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • Python 3の組み込み関数を速攻理解しよう: 後編 (2017/4/28)
     Python 3の組み込み関数のうち、オブジェクトやクラス、スコープ、コードの動的評価、ファイルや標準入出力を扱うものを取り上げる
  • 配列のコピーを1行でするには? (2017/4/26)
     配列をコピーするには、for/foreachループを使う方法もあるが、ArrayクラスのCopyメソッドを使うのが一番簡単で速度の面でも有利である
  • Microsoft Small Basic (2017/4/25)
     Microsoft Small Basicは学習を目的としてマイクロソフトが提供しているBASICの処理系。シンプルな言語仕様、習得が容易、簡潔な記述がその特徴
  • 第2回 Visual Studio 2017の基礎を知る (2017/4/21)
     開発環境Visual Studio 2017を使ったプログラミングに不可欠な知識とは? ソリューションの概念から画面構成まで基礎を説明
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH