Cara: Mengonfigurasi komponen COM berbasis .NET Framework untuk aktivasi bebas pendaftaran

Note

Panduan ini khusus untuk .NET Framework. Untuk interoperabilitas COM .NET modern, gunakan interop COM yang dihasilkan dari sumber atau API System.Runtime.InteropServices.ComWrappers. Untuk informasi selengkapnya, lihat Gambaran umum interop COM dan pembuatan sumber COM.

Aktivasi bebas pendaftaran untuk komponen berbasis .NET Framework hanya sedikit lebih rumit daripada untuk komponen COM. Penyiapan memerlukan dua manifes:

  • Aplikasi COM harus memiliki manifes aplikasi bergaya Win32 untuk mengidentifikasi komponen terkelola.
  • Komponen berbasis .NET Framework harus memiliki manifes komponen untuk informasi aktivasi yang diperlukan saat runtime.

Artikel ini menjelaskan cara mengaitkan manifes aplikasi dengan aplikasi; mengaitkan manifes komponen dengan komponen; dan sematkan manifes komponen dalam rakitan.

Membuat manifes aplikasi

  1. Menggunakan editor XML, buat (atau ubah) manifes aplikasi yang dimiliki oleh aplikasi COM yang beroperasi dengan satu atau beberapa komponen terkelola.

  2. Sisipkan header standar berikut di awal file:

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

    Untuk informasi tentang elemen manifes dan atributnya, lihat Manifes Aplikasi.

  3. Identifikasi pemilik manifes. Dalam contoh berikut, myComApp versi 1 memiliki file manifes.

    <?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. Identifikasi rakitan dependen. Dalam contoh berikut, myComApp tergantung pada 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>
    
  5. Simpan dan beri nama file manifes. Nama manifes aplikasi adalah nama file eksekusi pada rakitan diikuti oleh ekstensi .manifest. Misalnya, nama file manifes aplikasi untuk myComApp.exe myComApp.exe.manifest.

Anda dapat menginstal manifes aplikasi di direktori yang sama dengan aplikasi COM. Atau, Anda dapat menambahkannya sebagai sumber daya ke file .exe aplikasi. Untuk informasi selengkapnya, lihat Tentang Rakitan Berdampingan.

Membuat daftar manifes komponen

  1. Menggunakan editor XML, buat manifes komponen untuk menjelaskan rakitan terkelola.

  2. Sisipkan header standar berikut di awal file:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    </assembly>
    
  3. Identifikasi pemilik file. Elemen <assemblyIdentity><dependentAssembly> elemen dalam file manifes aplikasi harus cocok dengan elemen dalam manifes komponen. Dalam contoh berikut, myManagedComp versi 1.2.3.4 memiliki file manifes.

    <?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. Identifikasi setiap kelas di assembly. Gunakan elemen <clrClass> untuk mengidentifikasi tiap kelas secara unik di rakitan terkelola. Elemen , yang merupakan subelemen dari <assembly> elemen , memiliki atribut yang dijelaskan dalam tabel berikut.

    Attribute Description Diperlukan
    clsid Pengidentifikasi yang menentukan kelas yang akan diaktifkan. Yes
    description String yang memberi tahu pengguna tentang komponen. String kosong adalah default. Tidak.
    name Sebuah string yang mewakili kelas terkelola. Yes
    progid Pengidentifikasi yang akan digunakan untuk aktivasi yang terlambat terikat. Tidak.
    threadingModel Model pemrosesan utas COM. "Keduanya" adalah nilai default. Tidak.
    runtimeVersion Menentukan versi runtime bahasa umum (CLR) yang akan digunakan. Jika Anda tidak menentukan atribut ini, dan CLR belum dimuat, komponen dimuat dengan CLR terbaru yang diinstal sebelum CLR versi 4. Jika Anda menentukan v1.0.3705, v1.1.4322, atau v2.0.50727, versi secara otomatis digulirkan ke versi CLR terbaru yang diinstal sebelum CLR versi 4 (biasanya v2.0.50727). Jika versi clr lain sudah dimuat dan versi yang ditentukan dapat dimuat secara berdampingan dalam proses, versi yang ditentukan dimuat; jika tidak, CLR yang dimuat digunakan. Ini dapat menyebabkan kegagalan beban. Tidak.
    tlbid Pengidentifikasi pustaka tipe yang berisi informasi tipe tentang kelas. Tidak.

    Semua tag atribut bersifat sensitif terhadap huruf besar dan huruf kecil. Anda dapat memperoleh CLSID, ProgID, model utas, dan versi runtime dengan melihat pustaka jenis yang diekspor untuk rakitan dengan ObjectViewer OLE/COM (Oleview.exe).

    Manifes komponen berikut mengidentifikasi dua kelas, testClass1 dan testClass2.

    <?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. Simpan dan beri nama file manifes. Nama manifes komponen adalah nama pustaka perakitan diikuti oleh ekstensi .manifest. Misalnya, myManagedComp.dll adalah myManagedComp.manifest.

Anda harus menyematkan manifes komponen sebagai sumber daya di rakitan.

Menyematkan manifes komponen dalam rakitan terkelola

  1. Buat skrip sumber daya yang berisi pernyataan berikut:

    1 RT_MANIFEST myManagedComp.manifest

    Dalam pernyataan ini, myManagedComp.manifest adalah nama manifes komponen yang disematkan. Untuk contoh ini, nama file skrip adalah myresource.rc.

  2. Kompilasi skrip menggunakan Microsoft Windows Resource Compiler (Rc.exe). Di Command Prompt, ketik perintah berikut:

    rc myresource.rc

    Rc.exe menghasilkan file sumber daya myresource.res.

  3. Kompilasi file sumber assembly lagi dan tentukan file sumber daya dengan menggunakan opsi /win32res :

    /win32res:myresource.res

    Sekali lagi, myresource.res adalah nama file sumber daya yang berisi sumber daya yang disematkan.

Lihat juga