.NET Framework ベースのコンポーネントの登録不要のアクティブ化は、COM コンポーネントの場合よりも少し複雑です。 セットアップには、次の 2 つのマニフェストが必要です。
COM アプリケーションには、マネージド コンポーネントを識別するための Win32 スタイルのアプリケーション マニフェストが必要です。
.NET Framework ベースのコンポーネントには、実行時に必要なアクティブ化情報のコンポーネント マニフェストが必要です。
このトピックでは、アプリケーション マニフェストをアプリケーションに関連付ける方法について説明します。コンポーネント マニフェストをコンポーネントに関連付ける。コンポーネント マニフェストをアセンブリに埋め込みます。
アプリケーション マニフェストを作成する
XML エディターを使用して、1 つ以上のマネージド コンポーネントと相互運用している COM アプリケーションが所有するアプリケーション マニフェストを作成 (または変更) します。
ファイルの先頭に次の標準ヘッダーを挿入します。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> </assembly>マニフェスト要素とその属性の詳細については、「 アプリケーション マニフェスト」を参照してください。
マニフェストの所有者を特定します。 次の例では、バージョン 1
myComAppマニフェスト ファイルを所有しています。<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="myOrganization.myDivision.myComApp" version="1.0.0.0" processorArchitecture="msil" /> </assembly>依存アセンブリを識別します。 次の例では、
myComAppはmyManagedCompによって異なります。<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="myOrganization.myDivision.myComApp" version="1.0.0.0" processorArchitecture="x86" publicKeyToken="8275b28176rcbbef" /> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="myOrganization.myDivision.myManagedComp" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="8275b28176rcbbef" /> </dependentAssembly> </dependency> </assembly>マニフェスト ファイルを保存して名前を付けます。 アプリケーション マニフェストの名前は、アセンブリ実行可能ファイルの名前の後に .manifest 拡張機能が続く名前です。 たとえば、myComApp.exe のアプリケーション マニフェスト ファイル名は .manifest myComApp.exe。
COM アプリケーションと同じディレクトリにアプリケーション マニフェストをインストールできます。 または、アプリケーションの .exe ファイルにリソースとして追加することもできます。 詳細については、「 サイド バイ サイド アセンブリについて」を参照してください。
コンポーネント マニフェストを作成する
XML エディターを使用して、マネージド アセンブリを記述するコンポーネント マニフェストを作成します。
ファイルの先頭に次の標準ヘッダーを挿入します。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> </assembly>ファイルの所有者を特定します。 アプリケーション マニフェスト ファイル内の
<assemblyIdentity>要素の<dependentAssembly>要素は、コンポーネント マニフェスト内の要素と一致する必要があります。 次の例では、myManagedCompバージョン 1.2.3.4 がマニフェスト ファイルを所有しています。<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="myOrganization.myDivision.myManagedComp" version="1.2.3.4" publicKeyToken="8275b28176rcbbef" processorArchitecture="msil" /> </assembly>アセンブリ内の各クラスを識別します。
<clrClass>要素を使用して、マネージド アセンブリ内の各クラスを一意に識別します。<assembly>要素のサブ要素である要素には、次の表で説明する属性があります。特性 Description 必須 clsidアクティブ化するクラスを指定する識別子。 イエス descriptionコンポーネントについてユーザーに通知する文字列。 空の文字列が既定値です。 いいえ nameマネージド クラスを表す文字列。 イエス progid遅延バインディングのアクティベーションに使用する識別子。 いいえ threadingModelCOM スレッド モデル。 "両方" が既定値です。 いいえ runtimeVersion使用する共通言語ランタイム (CLR) バージョンを指定します。 この属性を指定せず、CLR がまだ読み込まれていない場合、コンポーネントは CLR バージョン 4 より前の最新のインストール済み CLR で読み込まれます。 v1.0.3705、v1.1.4322、または v2.0.50727 を指定すると、バージョンは CLR バージョン 4 より前のインストール済みの最新の CLR バージョン (通常は v2.0.50727) に自動的にロールフォワードされます。 別のバージョンの CLR が既に読み込まれており、指定したバージョンを並行してインプロセスで読み込むことができる場合は、指定されたバージョンが読み込まれます。それ以外の場合は、読み込まれた CLR が使用されます。 これにより、読み込みエラーが発生する可能性があります。 いいえ tlbidクラスに関する型情報を含むタイプ ライブラリの識別子。 いいえ すべての属性タグでは大文字と小文字が区別されます。 OLE/COM ObjectViewer (Oleview.exe) を使用してアセンブリのエクスポートされたタイプ ライブラリを表示することで、CLSID、ProgID、スレッド モデル、ランタイム バージョンを取得できます。
次のコンポーネント マニフェストは、
testClass1とtestClass2の 2 つのクラスを識別します。<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="myOrganization.myDivision.myManagedComp" version="1.2.3.4" publicKeyToken="8275b28176rcbbef" /> <clrClass clsid="{65722BE6-3449-4628-ABD3-74B6864F9739}" progid="myManagedComp.testClass1" threadingModel="Both" name="myManagedComp.testClass1" runtimeVersion="v1.0.3705"> </clrClass> <clrClass clsid="{367221D6-3559-3328-ABD3-45B6825F9732}" progid="myManagedComp.testClass2" threadingModel="Both" name="myManagedComp.testClass2" runtimeVersion="v1.0.3705"> </clrClass> <file name="MyManagedComp.dll"> </file> </assembly>マニフェスト ファイルを保存して名前を付けます。 コンポーネント マニフェストの名前は、アセンブリ ライブラリの名前の後に .manifest 拡張機能が続きます。 たとえば、myManagedComp.dll は myManagedComp.manifest です。
コンポーネント マニフェストをリソースとしてアセンブリに埋め込む必要があります。
マネージド アセンブリにコンポーネント マニフェストを埋め込むには
次のステートメントを含むリソース スクリプトを作成します。
1 RT_MANIFEST myManagedComp.manifestこのステートメントでは、
myManagedComp.manifestは埋め込まれるコンポーネント マニフェストの名前です。 この例では、スクリプト ファイル名はmyresource.rc。Microsoft Windows リソース コンパイラ (Rc.exe) を使用してスクリプトをコンパイルします。 コマンド プロンプトで、次のコマンドを入力します。
rc myresource.rcRc.exe は、
myresource.resリソース ファイルを生成します。アセンブリのソース ファイルをもう一度コンパイルし、 /win32res オプションを使用してリソース ファイルを指定します。
/win32res:myresource.resここでも、
myresource.resは埋め込みリソースを含むリソース ファイルの名前です。
こちらも参照ください
.NET