アセンブリ マニフェスト

アセンブリ マニフェストは、サイド バイ サイド アセンブリを記述する XML ファイルです。 アセンブリ マニフェストでは、サイド バイ サイド アセンブリ、ファイル、およびアセンブリのリソースの名前とバージョン、および他のサイド バイ サイド アセンブリに対するアセンブリの依存関係について説明します。 サイド バイ サイド アセンブリのインストール、アクティブ化、および実行を正しく行うには、アセンブリ マニフェストが常にシステム上のアセンブリに付随している必要があります。

XML スキーマの完全な一覧については、「 マニフェスト ファイル スキーマ」を参照してください。

アセンブリ マニフェストには、次の要素と属性があります。

要素 属性 必須
アセンブリ はい
manifestVersion はい
noInheritable No
assemblyIdentity はい
type はい
name はい
language No
processorArchitecture No
version はい
publicKeyToken No
依存 関係 No
dependentAssembly No
file No
name はい
hashalg No
hash No
comClass いいえ
description No
clsid はい
threadingModel No
tlbid No
progid No
miscStatus No
miscStatusIcon No
miscStatusContent No
miscStatusDocPrint No
miscStatusDocPrint No
Typelib No
tlbid はい
version はい
helpdir はい
resourceid No
flags No
comInterfaceExternalProxyStub No
iid はい
baseInterface No
numMethods No
name No
tlbid No
proxyStubClsid32 No
comInterfaceProxyStub No
iid はい
name はい
tlbid No
baseInterface No
numMethods No
proxyStubClsid32 No
threadingModel No
windowClass No
バージョン No

ファイルの場所

アセンブリ マニフェストは、次の 3 つの場所にインストールできます。

  • 共有アセンブリに付随するマニフェストとして、アセンブリ マニフェストはサイド バイ サイド アセンブリ キャッシュに別のファイルとしてインストールする必要があります。 これは通常、Windows ディレクトリ内の WinSxS フォルダーです。
  • プライベート アセンブリに付随するマニフェストとして、アセンブリ マニフェストはアプリケーションのディレクトリ構造にインストールする必要があります。 これは通常、アプリケーションの実行可能ファイルと同じフォルダー内の別のファイルです。
  • DLL 内のリソースとして、アセンブリは DLL のプライベート使用に使用できます。 アセンブリ マニフェストを EXE にリソースとして含めることはできません。 EXE ファイルには、リソースとして アプリケーション マニフェスト を含めることができます。

ファイル名の構文

アセンブリ マニフェストの名前は、任意の有効なファイル名の後に .manifest が続きます。

たとえば、myassembly を参照するアセンブリ マニフェストでは、次のファイル名構文が使用されます。 アセンブリ マニフェストが別の<ファイルとしてインストールされている場合、またはリソース ID> が 1 の場合は、リソース ID フィールドを省略できます。

myassembly.\

Note

プライベート アセンブリをサイド バイ サイドで検索する方法のため、DLL をプライベート アセンブリとしてパッケージ化する場合は、次の名前付け制限が適用されます。 これを行うには、アセンブリ マニフェストをリソースとして DLL に配置することをお勧めします。 この場合、リソース ID は 1 である必要があり、プライベート アセンブリの名前は DLL の名前と同じにすることができます。 たとえば、DLL の名前がMicrosoft.Windows.mysample.dllの場合、マニフェストの assemblyIdentity 要素で使用される name 属性の値も Microsoft である可能性があります。Windows.mysample. 別の方法として、アセンブリ マニフェストを別のファイルに配置することもできます。 この場合、アセンブリの名前とそのマニフェストは、DLL の名前と異なる必要があります。 たとえば、Microsoft などです。Windows.mysampleAsm, Microsoft.Windows.mysampleAsm.manifest、およびMicrosoft.Windows.Mysample.dll。 プライベート アセンブリをサイド バイ サイドで検索する方法の詳細については、「 アセンブリ検索シーケンス」を参照してください。

要素

要素と属性の名前では大文字と小文字が区別されます。 要素と属性の値は、type 属性の値を除き、大文字と小文字は区別されません。

アセンブリ

コンテナー要素。 最初のサブ要素は 、assemblyIdentity または noInheritable 要素である必要があります。 アセンブリ マニフェストは、 assemblyIdentity によって識別されるサイド バイ サイド アセンブリを一意に記述します。 必須。

アセンブリ要素は、名前空間 "urn:schemas-microsoft-com:asm.v1" 内にある必要があります。 アセンブリの子要素も、継承またはタグ付けによって、この名前空間に存在する必要があります。

assembly 要素には、次の属性があります。

属性 説明
manifestVersion manifestVersion 属性は 1.0 に設定する必要があります。

noInheritable

アセンブリ マニフェストにこの要素を含め、 アセンブリがアクティブ化コンテキスト とそのオブジェクトを管理することを示します。 noInheritable 要素は、アセンブリ要素のサブ要素である必要があります。 assemblyIdentity 要素は、noInheritable 要素の後に指定する必要があります。 アセンブリが noInherit 要素を含むアプリケーション マニフェストで使用される場合は、アセンブリ マニフェストで noInheritable 要素が必要です。 アプリケーション マニフェスト内の noInheritable 要素は効果がありません。 noInheritable 要素には子要素がありません。

assemblyIdentity

サイド バイ サイド アセンブリを記述し、一意に識別します。

assembly 要素の最初のサブ要素として、assemblyIdentity は、このアセンブリ マニフェストを所有するサイド バイ サイド アセンブリを記述し、一意に識別します。 これは、アセンブリ マニフェストの DEF コンテキスト assemblyIdentity と呼ばれます。

dependentAssembly 要素の最初のサブ要素として、assemblyIdentity は DEF コンテキスト assemblyIdentity で使用されるサイド バイ サイド アセンブリを記述し、一意に識別します。 これは、アセンブリ マニフェストの REF コンテキスト assemblyIdentity と呼ばれます。 DEF コンテキスト アセンブリでは、REF コンテキスト アセンブリが正しく動作する必要があります。 すべての REF コンテキスト assemblyIdentity は、 参照されるアセンブリの独自のアセンブリ マニフェスト内の対応する DEF コンテキスト assemblyIdentity と完全に一致する必要があることに注意してください。

この要素にはサブ要素がありません。 assemblyIdentity 要素には、次の属性があります。

属性 説明
type アセンブリの種類を指定します。 値は win32 で、小文字にする必要があります。 必須。
name アセンブリに一意の名前を付けます。 アセンブリ名には、次の形式を使用します:Organization.Division.Name。 たとえば、Microsoft などです。Windows.mysampleAsm. 必須。 個別のマニフェスト ファイルを持つプライベート アセンブリとしてパッケージ化された DLL の場合、アセンブリの名前は DLL とマニフェストの名前とは異なる必要があることに注意してください。
language アセンブリの言語を識別します。 省略可能。 アセンブリが言語固有の場合は、DHTML 言語コードを指定します。 グローバル使用を目的としたアセンブリ マニフェストの DEF コンテキスト assemblyIdentity (言語に依存しない) では、言語属性を省略します。
世界中で使用されるアセンブリ マニフェストの REF コンテキスト assemblyIdentity (言語に依存しない) では、言語の値を "*" に設定します。
processorArchitecture プロセッサを指定します。 有効な値は、32 ビット Windowsの場合は x86、64 ビット Windowsの場合は ia64 です。 省略可能。
version アセンブリのバージョンを指定します。 mmmmm.nnnnn.ooooo.ppppp という 4 部構成のバージョン形式を使用します。 期間で区切られた各部分は、0 から 65535 までの範囲で指定できます。 詳細については、「 アセンブリバージョン」を参照してください。 必須。
publicKeyToken アセンブリが署名されている公開キーの SHA-1 ハッシュの最後の 8 バイトを表す 16 文字の 16 進文字列。 カタログの署名に使用する公開キーは、2048 ビット以上である必要があります。 サイド バイ サイドの共有アセンブリに必要です。

依存 関係

少なくとも 1 つの dependentAssembly を含むコンテナー要素。 最初のサブ要素は 、dependentAssembly 要素である必要があります。 依存関係には属性がありません。 省略可能。

dependentAssembly

最初のサブ要素は、このアセンブリ マニフェストを所有するサイド バイ サイド アセンブリで使用されるサイド バイ サイド アセンブリを記述し、一意に識別する assemblyIdentity 要素である必要があります。 依存するすべての Assembly は、 1 つの 依存関係内に存在する必要があります。 省略可能。

ファイル

サイド バイ サイド アセンブリで使用されるファイルを格納します。 comClasstypelibwindowClasscomInterfaceProxyStub サブ要素を格納します。 省略可能。

file 要素には、次の属性があります。

属性 説明
name ファイルの名前 (たとえば、Conctl32.dll)。
hashalg ファイルのハッシュを作成するために使用されるアルゴリズム。 この値は SHA1 である必要があります。
hash 名前で参照されるファイルのハッシュ。 ハッシュ アルゴリズムに応じて長さの 16 進数文字列。

comClass

ファイル要素のサブ要素。 省略可能。

comClass 要素には、次の属性があります。

属性 説明
description クラス名。
clsid クラスを一意に識別する GUID。 必須。 値は有効な GUID の形式である必要があります。
threadingModel インプロセス COM クラスによって使用されるスレッド モデル。 このプロパティが null の場合、スレッド モデルは使用されません。 コンポーネントはクライアントのメイン スレッドで作成され、他のスレッドからの呼び出しはこのスレッドにマーシャリングされます。 省略可能。 有効な値は、"Apartment"、"Free"、"Both"、"Neutral" です。
tlbid COM コンポーネントのタイプ ライブラリの GUID。 値は GUID の形式である必要があります。 省略可能。
progid COM コンポーネントに関連付けられている、バージョン依存のプログラム識別子。 ProgID の形式はベンダー>です<。<コンポーネント>。<バージョン>。
miscStatus アセンブリ 内の重複は、MiscStatus レジストリ キーによって提供される情報をマニフェストします。 miscStatusIconmiscStatusContentmiscStatusDocprint、または miscStatusThumbnail 属性の値が見つからない場合は、miscStatus に一覧表示されている対応する既定値が不足している属性に使用されます。 値には、次の表の属性値のコンマ区切りのリストを指定できます。 COM クラスが Miscstatus レジストリ キー値を必要とする OCX クラスの場合は、この属性を使用できます。
miscStatusIcon DVASPECT_ICON によって提供される情報を、アセンブリ マニフェスト内に複製します。 これにより、オブジェクトのアイコンを提供できます。 値には、次の表の属性値のコンマ区切りのリストを指定できます。 COM クラスが Miscstatus レジストリ キー値を必要とする OCX クラスの場合は、この属性を使用できます。
miscStatusContent DVASPECT_CONTENT によって提供される情報を、アセンブリ マニフェスト内に複製します。 これにより、画面またはプリンターに表示できる複合ドキュメントを提供できます。 値には、次の表の属性値のコンマ区切りのリストを指定できます。 COM クラスが Miscstatus レジストリ キー値を必要とする OCX クラスの場合は、この属性を使用できます。
miscStatusDocprint DVASPECT_DOCPRINT によって提供される情報を、アセンブリ マニフェスト内に複製します。 プリンターに印刷されるかのように、画面に表示できるオブジェクト表現を提供できます。 値には、次の表の属性値のコンマ区切りのリストを指定できます。 COM クラスが Miscstatus レジストリ キー値を必要とする OCX クラスの場合は、この属性を使用できます。
miscStatusThumbnail DVASPECT_THUMBNAIL によって提供される情報を、アセンブリ マニフェスト内に複製します。 閲覧ツールで表示できるオブジェクトのサムネイルを提供できます。 値には、次の表の属性値のコンマ区切りのリストを指定できます。 COM クラスが Miscstatus レジストリ キー値を必要とする OCX クラスの場合は、この属性を使用できます。

comClass 要素は、バージョン依存の progid を一覧表示する子として progid>... 要素を持<つことができます。

次の例は、ファイル要素に含まれる comClass 要素を示しています。

<file name="sampleu.dll">
        <comClass description="Font Property Page"
    clsid="{0BE35200-8F91-11CE-9DE3-00AA004BB851}"
          threadingModel = "Both"
             tlbid = "{44EC0535-400F-11D0-9DCD-00A0C90391D3}"/>
        <comClass description="Color Property Page"
    clsid="{0BE35201-8F91-11CE-9DE3-00AA004BB851}" 
    progid="ABC.Registrar"/>
    </file>

COM クラスが、MiscStatus レジストリ サブキーでオブジェクトの作成方法と表示方法を指定する必要がある OCX クラスの場合は、アセンブリ マニフェストでこの情報を複製してオブジェクトを有効にすることができます。 comClass 要素の miscStatusmiscStatusContentmiscStatusDocprintmiscStatusThumbnail 属性を使用して、オブジェクトの特性を指定します。 これらの属性を、次の表の属性値のコンマ区切りのリストに設定します。 これらの属性は、DVASPECT 列挙体によって提供される情報を複製します。 miscStatusIconmiscStatusContentmiscStatusDocprint、または miscStatusThumbnail に値が見つからない場合は、miscStatus で指定された既定値が使用されます。 次の表の属性値を使用します。 これらは 、OLEMISC 列挙体のビット フラグに対応します。

属性値 OLEMISC 定数
recomposeonresize OLEMISC_RECOMPOSEONRESIZE
onlyiconic OLEMISC_ONLYICONIC
insertnotreplace OLEMISC_INSERTNOTREPLACE
static OLEMISC_STATIC
cantlinkinside OLEMISC_CANTLINKINSIDE
canlinkbyole1 OLEMISC_CANLINKBYOLE1
islinkobject OLEMISC_ISLINKOBJECT
insideout OLEMISC_INSIDEOUT
activatewhenvisible OLEMISC_ACTIVATEWHENVISIBLE
renderingisdeviceindependent OLEMISC_RENDERINGISDEVICEINDEPENDENT
invisibleatruntime OLEMISC_INVISIBLEATRUNTIME
alwaysrun OLEMISC_ALWAYSRUN
actslikebutton OLEMISC_ACTSLIKEBUTTON
actslikelabel OLEMISC_ACTSLIKELABEL
nouiactivate OLEMISC_NOUIACTIVATE
alignable OLEMISC_ALIGNABLE
simpleframe OLEMISC_SIMPLEFRAME
setclientsitefirst OLEMISC_SETCLIENTSITEFIRST
Imemode TOLEMISC_IMEMODE
ignoreativatewhenvisible OLEMISC_IGNOREACTIVATEWHENVISIBLE
wantstomenumerge OLEMISC_WANTSTOMENUMERGE
supportsmultilevelundo OLEMISC_SUPPORTSMULTILEVELUNDO

Typelib

ファイル要素のサブ要素。 省略可能。

typelib 要素には、次の表に示す属性があります。

属性 説明
tlbid タイプ ライブラリの一意の ID。 必須。
version タイプ ライブラリの 2 部構成のバージョン番号。 マイナー バージョン番号のみが増える場合は、以前のタイプ ライブラリのすべての機能が互換性のある方法でサポートされます。 メジャー バージョン番号が変更された場合は、タイプ ライブラリに対してコンパイルされたコードを再コンパイルする必要があります。 タイプ ライブラリのバージョン番号は、アプリケーションのバージョン番号と異なる場合があります。 必須。
helpdir タイプ ライブラリ内の型のヘルプ ファイルが配置されているディレクトリ。 アプリケーションが複数の言語のタイプ ライブラリをサポートしている場合、ライブラリはヘルプ ファイル ディレクトリ内の異なるファイル名を参照する可能性があります。 値がない場合は、"" を指定します。 必須。
resourceid ロケール識別子 (LCID) の 16 進文字列表現。 0x プレフィックスがなく、先頭にゼロがない 1 ~ 4 桁の 16 進数です。 LCID には、中立の副言語識別子が含まれている場合があります。 詳細については、「 ロケール識別子」を参照してください。 省略可能。
flags このタイプ ライブラリのタイプ ライブラリ フラグの文字列表現。 具体的には、これは "RESTRICTED"、"CONTROL"、"HIDDEN"、"HASDISKIMAGE" のいずれかである必要があります。 これらは LIBFLAGS 列挙の値であり、ICreateTypeLib::SetLibFlags メソッドの uLibFlags パラメーターで指定されているものと同じフラグです。 省略可能。

次の例は、ファイル要素に含まれる typelib 要素を示しています。

<file name="sampleu.dll">
       <typelib tlbid="{44EC0535-400F-11D0-9DCD-00A0C90391D3}"
       version="1.0" helpdir=""/>
</file>

comInterfaceExternalProxyStub

comInterfaceExternalProxyStubアセンブリ要素のサブ要素であり、オートメーション インターフェイスに使用されます。 たとえば、 IDispatch とその派生インターフェイスです。 省略可能。

既定のプロキシ スタブ実装は、 IDispatch から派生したインターフェイスなど、ほとんどのオートメーション インターフェイスに適しています。 インターフェイス プロキシ スタブとその他のすべての外部プロキシ スタブ インターフェイス実装は、 comInterfaceExternalProxyStub に一覧表示する必要があります。 comInterfaceExternalProxyStub 要素には、次の表に示す属性があります。

属性 説明
iid プロキシが宣言されているインターフェイスの IID。 必須。 値は "{iid}" の形式にする必要があります。
baseInterface iid 属性によって記述されたものの派生元となるインターフェイスの IID 。 この属性は省略可能です。 値は "{iid}" の形式にする必要があります。
numMethods そのインターフェイスによって実装されているメソッドの数。 この属性は省略可能です。 値は"n" の形式にする必要があります。
name コードに表示されるインターフェイスの名前。 たとえば、"IViewObject" です。 これは説明的な文字列にしないでください。 この属性は省略可能です。 値は"name" の形式にする必要があります。
tlbid iid 属性で指定されたインターフェイスの説明を含むタイプ ライブラリ。 この属性は省略可能です。 値は "{tlbid}" の形式にする必要があります。
proxyStubClsid32 IID を、32 ビット プロキシ DLL 内の CLSID にマップします。

comInterfaceExternalProxyStub 要素の例を次に示します。

<comInterfaceExternalProxyStub 
  name="IAxWinAmbientDispatch" 
    iid="{B6EA2051-048A-11D1-82B9-00C04FB9942E}" 
    numMethods="35" 
  baseInterface="{00000000-0000-0000-C000-000000000046}"/>

comInterfaceProxyStub

ファイル要素のサブ要素。 省略可能。

アセンブリ内のファイルがプロキシ スタブを実装する場合、対応するファイル タグには 、comInterfaceProxyStub 要素と同じ属性を持つ comInterfaceProxyStub サブ要素を含める必要があります。 コンポーネントの comInterfaceProxyStub 依存関係の一部を省略した場合、プロセスとスレッド間のインターフェイスのマーシャリングが期待どおりに機能しない場合があります。

comInterfaceProxyStub 要素には、次の属性があります。

属性 説明
iid 次の値を使用します。プロキシが宣言されているインターフェイスの IID。 必須。 値は "{iid}" の形式にする必要があります。
name コードに表示されるインターフェイスの名前。 たとえば、"IViewObject" です。 これは説明的な文字列にしないでください。 この属性は省略可能です。 値は"name" の形式にする必要があります。
tlbid iid 属性で指定されたインターフェイスの説明を含むタイプ ライブラリ。 この属性は省略可能です。 値は "{tlbid}" の形式にする必要があります。
baseInterface iid 属性によって記述されたものの派生元となるインターフェイスの IID 。 この属性は省略可能です。 値は "{iid}" の形式にする必要があります。
numMethods そのインターフェイスによって実装されているメソッドの数。 この属性は省略可能です。 値は"n" の形式にする必要があります。
proxyStubClsid32 IID を、32 ビット プロキシ DLL 内の CLSID にマップします。
threadingModel インプロセス COM クラスによって使用されるスレッド モデル。 このプロパティが null の場合、スレッド モデルは使用されません。 コンポーネントはクライアントのメイン スレッドで作成され、他のスレッドからの呼び出しはこのスレッドにマーシャリングされます。 省略可能。 有効な値は、"Apartment"、"Free"、"Both"、"Neutral" です。

windowclass

バージョン管理する Windows クラスの名前。 windowclass 要素には、次の属性があります。

属性 説明
バージョン この属性は、登録で使用される内部ウィンドウ クラス名に、ウィンドウ クラスを含むアセンブリのバージョンが含まれているかどうかを制御します。 この属性の値には、"yes" または "no" を指定できます。 既定値は "yes" です。 値 "no" は、同じウィンドウ クラスが side-by-side コンポーネントと同等の非サイド バイ サイド コンポーネントによって定義され、それらを同じウィンドウ クラスとして扱う場合にのみ使用する必要があります。 ウィンドウ クラスの登録に関する通常の規則では、バージョン管理されていないため、ウィンドウ クラスを登録する最初のコンポーネントのみが適用されることに注意してください。

次の例は、ファイル要素に含まれる windowclass 要素を示しています。

<file name="comctl32.dll">
        <windowClass versioned="no">ToolbarWindow32</windowClass>
</file>

アセンブリ マニフェストの例を次に示します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
manifestVersion="1.0">
    <assemblyIdentity type="win32" name="Microsoft.Tools.SampleAssembly" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="0000000000000000"/>
    <file name="sampleu.dll" hash="3eab067f82504bf271ed38112a4ccdf46094eb5a" hashalg="SHA1">
        <comClass description="Font Property Page" clsid="{0BE35200-8F91-11CE-9DE3-00AA004BB851}"/>
        <comClass description="Color Property Page" clsid="{0BE35201-8F91-11CE-9DE3-00AA004BB851}"/>
        <comClass description="Picture Property Page" clsid="{0BE35202-8F91-11CE-9DE3-00AA004BB851}"/>
    </file>
    <file name="bar.dll" hash="ac72753e5bb20446d88a48c8f0aaae769a962338" hashalg="SHA1"/>
    <file name="foo.dll" hash="a7312a1f6cfb46433001e0540458de60adcd5ec5" hashalg="SHA1">
        <comClass description="Registrar Class" clsid="{44EC053A-400F-11D0-9DCD-00A0C90391D3}" progid="ATL.Registrar"/>
    <comInterfaceProxyStub iid="{B6EA2051-048A-11D1-82B9-00C04FB9942E}" name=" IAxWinAmbientDispatch " tlbid="{34EC053A-400F-11D0-9DCD-00A0C90391D3}"/>
        <typelib tlbid="{44EC0535-400F-11D0-9DCD-00A0C90391D3}" version="1.0" helpdir=""/>
    </file>
    <file name="sampledll.dll" hash="ba62960ceb15073d2598379307aad84f3a73dfcb" hashalg="SHA1"/>
<windowClass>ToolbarWindow32</windowClass>
        <windowClass>ComboBoxEx32</windowClass>
        <windowClass>sample_trackbar32</windowClass>
        <windowClass>sample_updown32</windowClass>
</assembly>