Manifes Perakitan

Manifes perakitan adalah file XML yang menjelaskan perakitan berdampingan. Manifes perakitan menjelaskan nama dan versi rakitan, file, dan sumber daya perakitan secara berdampingan, serta ketergantungan rakitan pada rakitan berdampingan lainnya. Penginstalan, aktivasi, dan eksekusi rakitan berdampingan yang benar mengharuskan manifes perakitan selalu menyertai perakitan pada sistem.

Untuk daftar lengkap skema XML, lihat Skema File Manifes.

Manifes perakitan memiliki elemen dan atribut berikut.

Elemen Atribut Diperlukan
Majelis Ya
manifestVersion Ya
noInheritable Tidak
assemblyIdentity Ya
jenis Ya
nama Ya
bahasa Tidak
processorArchitecture Tidak
versi Ya
Publickeytoken Tidak
Ketergantungan Tidak
dependentAssembly Tidak
file Tidak
nama Ya
hashalg Tidak
Hash Tidak
comClass Tidak
deskirpsi Tidak
Clsid Ya
threadingModel Tidak
tlbid Tidak
progid Tidak
miscStatus Tidak
miscStatusIcon Tidak
miscStatusContent Tidak
miscStatusDocPrint Tidak
miscStatusThumbnail Tidak
typelib Tidak
tlbid Ya
versi Ya
helpdir Ya
resourceid Tidak
Bendera Tidak
comInterfaceExternalProxyStub Tidak
iid Ya
baseInterface Tidak
numMethods Tidak
nama Tidak
tlbid Tidak
proxyStubClsid32 Tidak
comInterfaceProxyStub Tidak
iid Ya
nama Ya
tlbid Tidak
baseInterface Tidak
numMethods Tidak
proxyStubClsid32 Tidak
threadingModel Tidak
windowClass Tidak
Berversi Tidak

Lokasi File

Manifes perakitan dapat diinstal di tiga lokasi:

  • Sebagai manifes yang menyertai rakitan bersama, manifes perakitan harus diinstal sebagai file terpisah di cache perakitan berdampingan. Ini biasanya folder WinSxS di direktori Windows.
  • Sebagai manifes yang menyertai rakitan privat, manifes perakitan harus diinstal dalam struktur direktori aplikasi. Ini biasanya merupakan file terpisah dalam folder yang sama dengan file yang dapat dieksekusi aplikasi.
  • Sebagai sumber daya dalam DLL, rakitan tersedia untuk penggunaan privat DLL. Manifes perakitan tidak dapat disertakan sebagai sumber daya dalam EXE. File EXE dapat menyertakan manifes aplikasi sebagai sumber daya.

Sintaks Nama File

Nama manifes rakitan adalah nama file yang valid diikuti oleh .manifest.

Misalnya, manifes perakitan yang merujuk ke myassembly akan menggunakan sintaks nama file berikut: myassembly.<resource ID>.manifest. Anda dapat menghilangkan <resource ID> bidang jika manifes perakitan sedang diinstal sebagai file terpisah atau jika ID sumber daya adalah 1.

Catatan

Karena cara pencarian berdampingan untuk rakitan privat, pembatasan penamaan berikut berlaku saat mengemas DLL sebagai rakitan privat. Cara yang disarankan untuk melakukan ini adalah dengan menempatkan manifes perakitan di DLL sebagai sumber daya. Dalam hal ini, ID sumber daya harus sama dengan 1 dan nama rakitan privat mungkin sama dengan nama DLL. Misalnya, jika nama DLL Microsoft.Windows.mysample.dll, nilai atribut nama yang digunakan dalam elemen assemblyIdentity dari manifes mungkin juga Microsoft.Windows.mysample. Cara alternatif adalah dengan menempatkan manifes perakitan dalam file terpisah. Dalam hal ini, nama rakitan dan manifesnya harus berbeda dari nama DLL. Misalnya, Microsoft.Windows.mysampleAsm, Microsoft.Windows.mysampleAsm.manifest, dan Microsoft.Windows.Mysample.dll. Untuk informasi selengkapnya tentang cara pencarian berdampingan untuk rakitan privat, lihat Urutan Pencarian Perakitan.

Elemen

Nama elemen dan atribut peka huruf besar/kecil. Nilai elemen dan atribut tidak peka huruf besar/kecil, kecuali untuk nilai atribut jenis.

Majelis

Elemen kontainer. Subelemen pertamanya harus berupa elemen assemblyIdentity atau noInheritable . Manifes perakitan secara unik menggambarkan rakitan berdampingan yang diidentifikasi oleh assemblyIdentity. Wajib diisi.

Elemen assembly harus berada di namespace "urn:schemas-microsoft-com:asm.v1". Elemen anak dari assembly juga harus berada di namespace layanan ini, dengan pewarisan atau dengan pemberian tag.

Elemen assembly memiliki atribut berikut.

Atribut Deskripsi
manifestVersion Atribut manifestVersion harus diatur ke 1.0.

noInheritable

Sertakan elemen ini dalam manifes perakitan untuk menunjukkan bahwa perakitan mengelola konteks aktivasi dan objeknya. Elemen noInheritable harus merupakan subelemen dari elemen assembly . Elemen assemblyIdentity harus datang setelah elemen noInheritable . Elemen noInheritable diperlukan dalam manifes assembly jika assembly digunakan oleh manifes aplikasi apa pun yang menyertakan elemen noInherit . Elemen noInheritable dalam manifes aplikasi tidak berpengaruh. Elemen noInheritable tidak memiliki elemen turunan.

assemblyIdentity

Menjelaskan dan mengidentifikasi rakitan berdampingan secara unik.

Sebagai subelemen pertama dari elemen assembly , assemblyIdentity menjelaskan dan secara unik mengidentifikasi rakitan berdampingan yang memiliki manifes perakitan ini. Ini disebut assemblyIdentity konteks DEF dari manifes perakitan.

Sebagai subelemen pertama dari elemen dependentAssembly , assemblyIdentity menjelaskan dan secara unik mengidentifikasi rakitan berdampingan yang digunakan oleh assemblyIdentity konteks DEF. Ini disebut assemblyIdentity konteks REF dari manifes perakitan. Rakitan konteks DEF mengharuskan rakitan konteks REF berfungsi dengan benar. Perhatikan bahwa setiap assemblyIdentity konteks REF harus sama persis dengan assemblyIdentity konteks DEF yang sesuai dalam manifes assembly assembly yang direferensikan.

Elemen ini tidak memiliki subelemen. Elemen assemblyIdentity memang memiliki atribut berikut.

Atribut Deskripsi
jenis Menentukan jenis rakitan. Nilainya harus win32 dan dalam huruf kecil. Wajib diisi.
nama Secara unik menamai assembly. Gunakan format berikut untuk nama rakitan: Organization.Division.Name. Misalnya, Microsoft.Windows.mysampleAsm. Wajib diisi. Perhatikan bahwa dalam kasus DLL yang dikemas sebagai rakitan privat dengan file manifes terpisah, nama rakitan harus berbeda dari nama DLL dan manifes.
bahasa Mengidentifikasi bahasa assembly. Pilihan. Jika rakitan khusus bahasa, tentukan kode bahasa DHTML. Dalam assemblyIdentity konteks DEF dari manifes perakitan yang ditujukan untuk penggunaan di seluruh dunia (bahasa netral) menghilangkan atribut bahasa.
Dalam assemblyIdentity konteks REF dari manifes perakitan yang ditujukan untuk penggunaan di seluruh dunia (bahasa netral) menetapkan nilai bahasa ke "*".
processorArchitecture Menentukan prosesor. Nilai yang valid adalah x86 untuk Windows 32-bit dan ia64 untuk Windows 64-bit. Pilihan.
versi Menentukan versi assembly. Gunakan format versi empat bagian: mmmmm.nnnnn.ooooo.ppppp. Masing-masing bagian yang dipisahkan oleh titik dapat 0-65535 inklusif. Untuk informasi selengkapnya, lihat Versi Assembly. Wajib diisi.
Publickeytoken String heksadesimal 16 karakter yang mewakili 8 byte terakhir hash SHA-1 dari kunci publik tempat perakitan ditandatangani. Kunci umum yang digunakan untuk menandatangani katalog harus 2048 bit atau lebih besar. Diperlukan untuk rakitan bersama berdampingan.

Ketergantungan

Elemen kontainer termasuk setidaknya satu dependentAssembly. Subelemen pertama harus berupa elemen dependentAssembly . Dependensi tidak memiliki atribut. Pilihan.

dependentAssembly

Sublemen pertama harus merupakan elemen assemblyIdentity yang menjelaskan dan secara unik mengidentifikasi perakitan berdampingan yang digunakan oleh perakitan berdampingan yang memiliki manifes perakitan ini. Setiap dependentAssembly harus berada di dalam tepat satu dependensi. Pilihan.

File

Berisi file yang digunakan oleh rakitan berdampingan. Berisi subelemen comClass, typelib, windowClass, comInterfaceProxyStub . Pilihan.

Elemen file memiliki atribut berikut.

Atribut Deskripsi
nama Nama file, misalnya, Conctl32.dll.
hashalg Algoritma yang digunakan untuk membuat hash file. Nilai ini harus SHA1.
Hash Hash file yang disebut berdasarkan nama. String panjang heksadesimal tergantung pada algoritma hash.

comClass

Subelemen elemen file . Pilihan.

Elemen comClass memiliki atribut berikut.

Atribut Deskripsi
deskirpsi Nama kelas.
Clsid GUID yang secara unik mengidentifikasi Kelas. Wajib diisi. Nilai harus dalam format GUID yang valid.
threadingModel Model utas yang digunakan oleh kelas COM dalam proses. Jika properti ini null, maka tidak ada model utas yang digunakan. Komponen dibuat di utas utama klien dan panggilan dari utas lain dirangkai ke utas ini. Opsional. Nilai yang valid adalah: "Apartemen", "Gratis", "Keduanya", dan "Netral".
tlbid GUID pustaka jenis untuk komponen COM ini. Nilai harus dalam format GUID. Pilihan.
progid Pengidentifikasi terprogram yang bergantung versi yang terkait dengan komponen COM. Format ProgID adalah <vendor>.<komponen>.<versi>.
miscStatus Duplikat dalam perakitan memanifestasikan informasi yang disediakan oleh kunci registri MiscStatus. Jika nilai untuk atribut miscStatusIcon, miscStatusContent, miscStatusDocprint, atau miscStatusThumbnail tidak ditemukan, nilai default terkait yang tercantum di miscStatus digunakan untuk atribut yang hilang. Nilai dapat menjadi daftar nilai atribut yang dibatasi koma dari tabel di bawah ini. Anda dapat menggunakan atribut ini jika kelas COM adalah kelas OCX yang memerlukan nilai kunci registri Miscstatus.
miscStatusIcon Duplikat dalam rakitan menunjukkan informasi yang disediakan oleh DVASPECT_ICON. Ini dapat memberikan ikon objek. Nilai dapat menjadi daftar nilai atribut yang dibatasi koma dari tabel di bawah ini. Anda dapat menggunakan atribut ini jika kelas COM adalah kelas OCX yang memerlukan nilai kunci registri Miscstatus.
miscStatusContent Duplikat dalam rakitan menunjukkan informasi yang diberikan oleh DVASPECT_CONTENT. Ini dapat menyediakan dokumen campuran yang dapat ditampilkan untuk layar atau printer. Nilai dapat menjadi daftar nilai atribut yang dibatasi koma dari tabel di bawah ini. Anda dapat menggunakan atribut ini jika kelas COM adalah kelas OCX yang memerlukan nilai kunci registri Miscstatus.
miscStatusDocprint Duplikat dalam rakitan menunjukkan informasi yang diberikan oleh DVASPECT_DOCPRINT. Ini dapat memberikan representasi objek yang dapat ditampilkan pada layar seolah-olah dicetak ke printer. Nilai dapat menjadi daftar nilai atribut yang dibatasi koma dari tabel di bawah ini. Anda dapat menggunakan atribut ini jika kelas COM adalah kelas OCX yang memerlukan nilai kunci registri Miscstatus.
miscStatusThumbnail Duplikat dalam rakitan menunjukkan informasi yang disediakan oleh DVASPECT_THUMBNAIL. Ini dapat memberikan gambar mini objek yang dapat ditampilkan di alat penelusuran. Nilai dapat menjadi daftar nilai atribut yang dibatasi koma dari tabel di bawah ini. Anda dapat menggunakan atribut ini jika kelas COM adalah kelas OCX yang memerlukan nilai kunci registri Miscstatus.

Elemen comClass dapat memiliki <elemen progid>... sebagai anak-anak, yang mencantumkan progid dependen versi.

Contoh berikut menunjukkan elemen comClass yang disertakan dalam elemen file .

<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>

Jika kelas COM Anda adalah kelas OCX yang memerlukan subkunci registri MiscStatus untuk menentukan cara membuat dan menampilkan objek, Anda dapat mengaktifkan objek dengan menduplikasi informasi ini dalam manifes perakitan. Tentukan karakteristik objek dengan menggunakan atribut miscStatus, miscStatusIcon, miscStatusContent, miscStatusDocprint, dan miscStatusThumbnail dari elemen comClass . Atur atribut ini ke daftar nilai atribut yang dipisahkan koma dari tabel berikut. Atribut ini menduplikasi informasi yang akan disediakan oleh enumerasi DVASPECT. Jika tidak ada nilai yang ditemukan untuk miscStatusIcon, miscStatusContent, miscStatusDocprint, atau miscStatusThumbnail, nilai default yang ditentukan dalam miscStatus digunakan. Gunakan nilai atribut dari tabel berikut. Ini sesuai dengan bendera bit enumerasi OLEMISC .

Menilai Atribut Konstanta OLEMISC
recomposeonresize OLEMISC_RECOMPOSEONRESIZE
hanyaiconic OLEMISC_ONLYICONIC
insertnotreplace OLEMISC_INSERTNOTREPLACE
static OLEMISC_STATIC
cantlinkinside OLEMISC_CANTLINKINSIDE
canlinkbyole1 OLEMISC_CANLINKBYOLE1
islinkobject OLEMISC_ISLINKOBJECT
di dalam OLEMISC_INSIDEOUT
activatewhenvisible OLEMISC_ACTIVATEWHENVISIBLE
renderingisdeviceindependent OLEMISC_RENDERINGISDEVICEINDEPENDENT
invisibleatruntime OLEMISC_INVISIBLEATRUNTIME
alwaysrun OLEMISC_ALWAYSRUN
actslikebutton OLEMISC_ACTSLIKEBUTTON
actslikelabel OLEMISC_ACTSLIKELABEL
nouiactivate OLEMISC_NOUIACTIVATE
dapat diratakan OLEMISC_ALIGNABLE
simpleframe OLEMISC_SIMPLEFRAME
setclientsitefirst OLEMISC_SETCLIENTSITEFIRST
imemode TOLEMISC_IMEMODE
ignoreativatewhenvisible OLEMISC_IGNOREACTIVATEWHENVISIBLE
wantstomenumerge OLEMISC_WANTSTOMENUMERGE
supportsmultilevelundo OLEMISC_SUPPORTSMULTILEVELUNDO

typelib

Subelemen elemen file . Pilihan.

Elemen typelib memiliki atribut yang ditunjukkan dalam tabel berikut.

Atribut Deskripsi
tlbid ID unik pustaka jenis. Wajib diisi.
versi Nomor versi dua bagian dari pustaka jenis. Jika hanya nomor versi minor yang meningkat, semua fitur pustaka jenis sebelumnya didukung dengan cara yang kompatibel. Jika nomor versi utama berubah, kode yang dikompilasi terhadap pustaka jenis harus dikompilasi ulang. Nomor versi pustaka jenis mungkin berbeda dari nomor versi aplikasi. Wajib diisi.
helpdir Direktori tempat file Bantuan untuk jenis di pustaka jenis berada. Jika aplikasi mendukung pustaka jenis untuk beberapa bahasa, pustaka dapat merujuk ke nama file yang berbeda di direktori file Bantuan. Jika tidak ada nilai, tentukan "". Wajib diisi.
resourceid Representasi string heksadesimal dari pengidentifikasi lokal (LCID). Ini adalah satu hingga empat digit heksadesimal tanpa awalan 0x dan tidak ada nol di depannya. LCID mungkin memiliki pengidentifikasi subbahasa netral. Untuk informasi selengkapnya, lihat Pengidentifikasi Lokal. Pilihan.
Bendera Representasi string dari bendera pustaka jenis untuk pustaka jenis ini. Secara khusus, ini harus menjadi salah satu dari "RESTRICTED", "CONTROL", "HIDDEN" dan "HASDISKIMAGE". Ini adalah nilai enumerasi LIBFLAGS , dan merupakan bendera yang sama yang ditentukan dalam parameter uLibFlags dari metode ICreateTypeLib::SetLibFlags . Opsional.

Contoh berikut menunjukkan elemen typelib yang disertakan dalam elemen file .

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

comInterfaceExternalProxyStub

comInterfaceExternalProxyStub adalah sublemen dari elemen assembly dan digunakan untuk antarmuka otomatisasi. Misalnya, IDispatch dan antarmuka turunannya. Pilihan.

Implementasi proxy-stub default memadai untuk sebagian besar antarmuka otomatisasi, seperti antarmuka yang berasal dari IDispatch. Stub proksi antarmuka, dan semua implementasi antarmuka proxy-stub eksternal lainnya, harus tercantum di comInterfaceExternalProxyStub. Elemen comInterfaceExternalProxyStub memiliki atribut yang ditunjukkan dalam tabel berikut.

Atribut Deskripsi
iid IID antarmuka tempat proksi dideklarasikan. Wajib diisi. Nilai harus dalam bentuk: "{iid}".
baseInterface IID antarmuka dari mana yang dijelaskan oleh atribut iid diturunkan. Atribut ini opsional. Nilai harus dalam bentuk: "{iid}".
numMethods Jumlah metode yang diterapkan oleh antarmuka. Atribut ini opsional. Nilai harus dalam bentuk: "n".
nama Nama antarmuka seperti yang akan muncul dalam kode. Misalnya, "IViewObject". Ini seharusnya bukan string deskriptif. Atribut ini opsional. Nilai harus dalam bentuk: "name".
tlbid Pustaka jenis yang berisi deskripsi antarmuka yang ditentukan oleh atribut iid . Atribut ini opsional. Nilai harus dalam bentuk: "{tlbid}" .
proxyStubClsid32 Memetakan IID ke CLSID dalam DLL proxy 32-bit.

Contoh berikut menunjukkan elemen comInterfaceExternalProxyStub .

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

comInterfaceProxyStub

Subelemen elemen file . Pilihan.

Jika file dalam assembly mengimplementasikan stub proksi, tag file yang sesuai harus menyertakan subelemen comInterfaceProxyStub yang memiliki atribut yang identik dengan elemen comInterfaceProxyStub . Marshaling antarmuka antara proses dan utas mungkin tidak berfungsi seperti yang diharapkan jika Anda menghilangkan beberapa dependensi comInterfaceProxyStub untuk komponen Anda.

Elemen comInterfaceProxyStub memiliki atribut berikut.

Atribut Deskripsi
iid Tje. IID antarmuka yang proksinya sedang dideklarasikan. Wajib diisi. Nilai harus dalam bentuk: "{iid}".
nama Nama antarmuka seperti yang akan muncul dalam kode. Misalnya, "IViewObject". Ini seharusnya bukan string deskriptif. Atribut ini opsional. Nilai harus dalam bentuk: "name".
tlbid Pustaka jenis yang berisi deskripsi antarmuka yang ditentukan oleh atribut iid . Atribut ini opsional. Nilai harus dalam bentuk: "{tlbid}".
baseInterface IID antarmuka dari mana yang dijelaskan oleh atribut iid diturunkan. Atribut ini opsional. Nilai harus dalam bentuk: "{iid}".
numMethods Jumlah metode yang diterapkan oleh antarmuka. Atribut ini opsional. Nilai harus dalam bentuk: "n".
proxyStubClsid32 Memetakan IID ke CLSID dalam DLL proxy 32-bit.
threadingModel Model utas yang digunakan oleh kelas COM dalam proses. Jika properti ini null, maka tidak ada model utas yang digunakan. Komponen dibuat di utas utama klien dan panggilan dari utas lain dirangkai ke utas ini. Pilihan. Nilai yang valid adalah: "Apartemen", "Gratis", "Keduanya", dan "Netral".

windowclass

Nama kelas windows yang akan diberi versi. Elemen windowclass memiliki atribut berikut.

Atribut Deskripsi
Berversi Atribut ini mengontrol apakah nama kelas jendela internal yang digunakan dalam pendaftaran berisi versi rakitan yang berisi kelas jendela atau tidak. Nilai atribut ini dapat berupa "ya" atau "tidak". Defaultnya adalah "ya". Nilai "tidak" hanya boleh digunakan jika kelas jendela yang sama didefinisikan oleh komponen berdampingan dan komponen non-berdampingan yang setara dan Anda ingin memperlakukannya sebagai kelas jendela yang sama. Perhatikan bahwa aturan biasa tentang pendaftaran kelas jendela hanya berlaku komponen pertama yang mendaftarkan kelas jendela akan dapat mendaftarkannya karena tidak diberi versi.

Contoh berikut menunjukkan elemen windowclass yang disertakan dalam elemen file .

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

Contoh

Berikut ini adalah contoh manifes perakitan.

<?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>