エクスポート時のアセンブリの変換

アセンブリをタイプ ライブラリにエクスポートするツールまたは API は、最初に、マネージ アセンブリの一番外側のレベルを変換します。 アセンブリとタイプ ライブラリの間で一対一の対応付けが行われ、個別のアセンブリのそれぞれが、1 つのタイプ ライブラリに変換されます。 1 つのアセンブリを複数のタイプ ライブラリに分割することはできません。 同じアセンブリからは、変換の細部や方法に関係なく一貫して同じタイプ ライブラリが生成されます。

アセンブリ ID とライブラリ ID

アセンブリ ID は、次の表に示す 4 つの要素で構成されます。

要素

Description

名前

アセンブリを識別するための文字列。 通常、この文字列は、アセンブリ ファイル名から拡張子を削除した文字列と同じです。

公開キー

暗号化用の公開キーと秘密キーのペアのパブリック部分。

Version

メジャー、マイナー、ビルド、リビジョンの各番号の 4 部構成の数値文字列。

カルチャ文字列

アセンブリがサポートするロケール。

これらのフィールドを組み合わせて、アセンブリを識別する厳密な名前が作成されます。

t1ztw645.collapse_all(ja-jp,VS.110).gif部分的なアセンブリ マニフェスト

.assembly Sample as "Sample"
{
    publickey = (00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00   
                 00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00   
                 B7 3C 60 FD 2D 6B E4 14 4E BD D1 B6 1A 09 FB F1   
                 23 FF A8 62 59 B3 86 0B 0A 73 10 98 51 E5 0E D6   
                 7E 10 2F A7 6E AF 1B E5 E8 F1 2E E6 9C F7 74 9A   
                 1A 9A 83 88 2C 70 C9 8B 52 AD 97 5C 23 52 D2 42   
                 D2 6C 64 14 E7 1D 1D 55 B4 F4 9C BB 86 7B 07 99   
                 E3 19 E8 E1 4A BC 7A 40 A6 A2 9D AD 96 9B E5 CA   
                 7C 10 5B 79 16 80 29 50 CD C3 63 D0 12 81 D0 18   
                 B4 AE DA EC CC ED 8E AF A4 08 14 05 C6 9C 7B C5)
  .ver 1:0:295:37445
  .locale = (65 00 6E 00 2D 00 55 00 53 00 00 00 )   // en-US
}

対照的に、タイプ ライブラリ ID は、ライブラリ ID (LIBID)、バージョン、およびローカル ID (LCID) の 3 つの要素で構成されます。 ライブラリの ID には、型情報が含まれているファイルの名前も、ライブラリ内に定義されているフレンドリ名も含まれていません。 タイプ ライブラリは、LIBID、バージョン、および LCID を使用することにより、レジストリを使って特定できます。

t1ztw645.collapse_all(ja-jp,VS.110).gifタイプ ライブラリ表現

[ uuid(0D26FC72-7EB1-4565-AA75-DA5F177EFA66),
  lcid(0x0409), 
  version(2.1), 
  helpstring("Acme Widget Library")
] 
library Acme 
{
…
}; 

ライブラリ ID (LIBID)

エクスポート プロセスは、アセンブリをタイプ ライブラリに変換するときに、ライブラリの ID を保存します。 一意に識別されるそれぞれのアセンブリが、一意に識別される 1 つのタイプ ライブラリに変換されます。 一意性を保証するために、変換プロセスは、アセンブリの名前、バージョン、および公開キーを使用して LIBID を作成します。

つまり、この組み合わせは、次のことを保証します。

  • 名前、バージョン、および公開キーの 1 つの組み合わせからは、一貫して同じ LIBID が生成されます。

  • 名前、バージョン、および公開キーが異なるアセンブリに対して、同じ LIBID が生成されることはありません。

GuidAttribute を適用して、LIBID を明示的に設定できます。

バージョンおよびビルド番号

変換プロセスは、アセンブリからタイプ ライブラリにバージョン情報も渡します。ただし、アセンブリのバージョン番号は 4 つの部分で構成されますが、タイプ ライブラリのバージョン番号は 2 つの部分で構成されます。 アセンブリのメジャー バージョン番号とマイナー バージョン番号が、タイプ ライブラリに変換されます。 アセンブリ ビルド番号は、変換中に破棄されます。したがって、ビルド番号だけが異なる 2 つのアセンブリは、常に同じタイプ ライブラリに変換されます。 メジャー バージョン番号とマイナー バージョン番号が 0 であるアセンブリ (0.0.X.X) は、バージョン番号が 1.0 のタイプ ライブラリを生成します。

一般に、複数のアセンブリ バージョンから生成されたタイプ ライブラリの内容は、保証されません。 あるライブラリのバージョン 1.0 に定義されている型が、同じライブラリの別のバージョンに存在するとは限りません。

ロケール情報

アセンブリのロケール ID 文字列 (たとえば、us-en) は、LCID に変換され、タイプ ライブラリの LCID フィールドに格納されます。 アセンブリにロケール ID 文字列が存在しない場合は、エクスポート プロセスは LCID を 0 に設定します。

ピリオド (.) をアンダースコア (_) に変換

多くの場合、アセンブリ名には、タイプ ライブラリ名では使用できないピリオド (.) が含まれています。 エクスポート プロセスは、アセンブリの名前フィールド内のピリオドをアンダースコア (_) に変換します。

ヘルプの文字列

エクスポート プロセスは、デザイン時にこの属性がアセンブリに適用された場合、AssemblyDescriptionAttribute をタイプ ライブラリに関連付けられた helpstring または DocString にコピーします。 タイプ ライブラリの HelpFile フィールドまたは HelpContext フィールドは設定されません。 タイプ ライブラリの LIBFLAG はいずれも設定されません。

その他のアセンブリ フィールド

ProcessorOSInformationCodeBaseAliasAssemblyHashConfigurationFlags などのその他のアセンブリ フィールドは、変換中に破棄されます。

エクスポート プロセスは、hiddenrestrictedcontrol などのタイプ ライブラリ属性は設定しません。

参照

概念

エクスポート時のモジュールの変換

エクスポート時の型の変換

エクスポート時のメンバーの変換

エクスポート時のパラメーターの変換

その他の技術情報

アセンブリからタイプ ライブラリへの変換の要約