次の方法で共有


方法: 登録不要のアクティベーション用に .NET Framework-Based COM コンポーネントを構成する

.NET Framework ベースのコンポーネントの登録不要のアクティブ化は、COM コンポーネントの場合よりも少し複雑です。 セットアップには、次の 2 つのマニフェストが必要です。

  • COM アプリケーションには、マネージド コンポーネントを識別するための Win32 スタイルのアプリケーション マニフェストが必要です。

  • .NET Framework ベースのコンポーネントには、実行時に必要なアクティブ化情報のコンポーネント マニフェストが必要です。

このトピックでは、アプリケーション マニフェストをアプリケーションに関連付ける方法について説明します。コンポーネント マニフェストをコンポーネントに関連付ける。コンポーネント マニフェストをアセンブリに埋め込みます。

アプリケーション マニフェストを作成する

  1. XML エディターを使用して、1 つ以上のマネージド コンポーネントと相互運用している COM アプリケーションが所有するアプリケーション マニフェストを作成 (または変更) します。

  2. ファイルの先頭に次の標準ヘッダーを挿入します。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    </assembly>
    

    マニフェスト要素とその属性の詳細については、「 アプリケーション マニフェスト」を参照してください。

  3. マニフェストの所有者を特定します。 次の例では、バージョン 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>
    
  4. 依存アセンブリを識別します。 次の例では、 myComAppmyManagedCompによって異なります。

    <?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>
    
  5. マニフェスト ファイルを保存して名前を付けます。 アプリケーション マニフェストの名前は、アセンブリ実行可能ファイルの名前の後に .manifest 拡張機能が続く名前です。 たとえば、myComApp.exe のアプリケーション マニフェスト ファイル名は .manifest myComApp.exe。

COM アプリケーションと同じディレクトリにアプリケーション マニフェストをインストールできます。 または、アプリケーションの .exe ファイルにリソースとして追加することもできます。 詳細については、「 サイド バイ サイド アセンブリについて」を参照してください。

コンポーネント マニフェストを作成する

  1. XML エディターを使用して、マネージド アセンブリを記述するコンポーネント マニフェストを作成します。

  2. ファイルの先頭に次の標準ヘッダーを挿入します。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    </assembly>
    
  3. ファイルの所有者を特定します。 アプリケーション マニフェスト ファイル内の<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>
    
  4. アセンブリ内の各クラスを識別します。 <clrClass>要素を使用して、マネージド アセンブリ内の各クラスを一意に識別します。 <assembly>要素のサブ要素である要素には、次の表で説明する属性があります。

    特性 Description 必須
    clsid アクティブ化するクラスを指定する識別子。 イエス
    description コンポーネントについてユーザーに通知する文字列。 空の文字列が既定値です。 いいえ
    name マネージド クラスを表す文字列。 イエス
    progid 遅延バインディングのアクティベーションに使用する識別子。 いいえ
    threadingModel COM スレッド モデル。 "両方" が既定値です。 いいえ
    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、スレッド モデル、ランタイム バージョンを取得できます。

    次のコンポーネント マニフェストは、 testClass1testClass2の 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>
    
  5. マニフェスト ファイルを保存して名前を付けます。 コンポーネント マニフェストの名前は、アセンブリ ライブラリの名前の後に .manifest 拡張機能が続きます。 たとえば、myManagedComp.dll は myManagedComp.manifest です。

コンポーネント マニフェストをリソースとしてアセンブリに埋め込む必要があります。

マネージド アセンブリにコンポーネント マニフェストを埋め込むには

  1. 次のステートメントを含むリソース スクリプトを作成します。

    1 RT_MANIFEST myManagedComp.manifest

    このステートメントでは、 myManagedComp.manifest は埋め込まれるコンポーネント マニフェストの名前です。 この例では、スクリプト ファイル名は myresource.rc

  2. Microsoft Windows リソース コンパイラ (Rc.exe) を使用してスクリプトをコンパイルします。 コマンド プロンプトで、次のコマンドを入力します。

    rc myresource.rc

    Rc.exe は、 myresource.res リソース ファイルを生成します。

  3. アセンブリのソース ファイルをもう一度コンパイルし、 /win32res オプションを使用してリソース ファイルを指定します。

    /win32res:myresource.res

    ここでも、 myresource.res は埋め込みリソースを含むリソース ファイルの名前です。

こちらも参照ください