エクスポート時のアセンブリの変換
アセンブリをタイプ ライブラリにエクスポートするツールまたは API は、最初に、マネージ アセンブリの一番外側のレベルを変換します。 アセンブリとタイプ ライブラリの間で一対一の対応付けが行われ、個別のアセンブリのそれぞれが、1 つのタイプ ライブラリに変換されます。 1 つのアセンブリを複数のタイプ ライブラリに分割することはできません。 同じアセンブリからは、変換の細部や方法に関係なく一貫して同じタイプ ライブラリが生成されます。
アセンブリ ID とライブラリ ID
アセンブリ ID は、次の表に示す 4 つの要素で構成されます。
要素 |
説明 |
---|---|
名前 |
アセンブリを識別するための文字列。 通常、この文字列は、アセンブリ ファイル名から拡張子を削除した文字列と同じです。 |
公開キー |
暗号化用の公開キーと秘密キーのペアのパブリック部分。 |
バージョン |
メジャー、マイナー、ビルド、リビジョンの各番号の 4 部構成の数値文字列。 |
カルチャ文字列 |
アセンブリがサポートするロケール。 |
これらのフィールドを組み合わせて、アセンブリを識別する厳密な名前が作成されます。
部分的なアセンブリ マニフェスト
.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 を使用することにより、レジストリを使って特定できます。
タイプ ライブラリ表現
[ 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 はいずれも設定されません。
その他のアセンブリ フィールド
Processor、OSInformation、CodeBase、Alias、AssemblyHash、Configuration、Flags などのその他のアセンブリ フィールドは、変換中に破棄されます。
エクスポート プロセスは、hidden、restricted、control などのタイプ ライブラリ属性は設定しません。