Bagikan melalui


Membangun Rakitan Berdampingan C/C++

Rakitan berdampingan adalah kumpulan sumber daya—sekelompok DLL, kelas windows, server COM, pustaka jenis, atau antarmuka—tersedia untuk digunakan aplikasi saat runtime. Keuntungan utama dari pengemasan ulang DLL dalam rakitan adalah bahwa beberapa versi rakitan dapat digunakan oleh aplikasi pada saat yang sama dan dimungkinkan untuk layanan yang saat ini diinstal rakitan jika terjadi rilis pembaruan.

Aplikasi C++ dapat menggunakan satu atau beberapa DLL di berbagai bagian aplikasi. Pada runtime, DLL dimuat ke dalam proses utama dan kode yang diperlukan dijalankan. Aplikasi bergantung pada sistem operasi untuk menemukan DLL yang diminta, memahami DLL dependen lainnya yang harus dimuat dan kemudian memuatnya bersama dengan DLL yang diminta. Pada versi sistem operasi Windows yang lebih lama dari Windows XP, Windows Server 2003, dan Windows Vista, pemuat sistem operasi mencari DLL dependen di folder lokal aplikasi atau folder lain yang ditentukan pada jalur sistem. Pada Windows XP, Windows Server 2003, dan Windows Vista, loader sistem operasi juga dapat mencari DLL dependen menggunakan file manifes dan mencari rakitan berdampingan yang berisi DLL ini.

Secara default, ketika DLL dibangun dengan Visual Studio, DLL memiliki manifes aplikasi yang disematkan sebagai sumber daya RT_MANIFEST dengan ID yang sama dengan 2. Sama seperti untuk executable, manifes ini menjelaskan dependensi DLL ini pada rakitan lain. Ini mengasumsikan bahwa DLL bukan bagian dari rakitan dan aplikasi berdampingan yang bergantung pada DLL ini tidak akan menggunakan manifes aplikasi untuk memuatnya, tetapi sebaliknya mengandalkan pemuat sistem operasi untuk menemukan DLL ini pada jalur sistem.

Catatan

Penting bagi DLL yang menggunakan manifes aplikasi agar manifes disematkan sebagai sumber daya dengan ID sama dengan 2. Jika DLL dimuat secara dinamis pada runtime (misalnya, menggunakan fungsi LoadLibrary ), loader sistem operasi memuat rakitan dependen yang ditentukan dalam manifes DLL. Manifes aplikasi eksternal untuk DLL tidak diperiksa selama LoadLibrary panggilan. Jika manifes tidak disematkan, loader dapat mencoba memuat versi rakitan yang salah atau gagal menemukan rakitan dependen.

Satu atau beberapa DLL terkait dapat dikemas ulang ke dalam rakitan berdampingan dengan manifes rakitan yang sesuai, yang menjelaskan file mana yang membentuk rakitan serta ketergantungan rakitan pada rakitan berdampingan lainnya.

Catatan

Jika rakitan berisi satu DLL, disarankan untuk menyematkan manifes perakitan ke dalam DLL ini sebagai sumber daya dengan ID sama dengan 1, dan memberi rakitan privat nama yang sama dengan DLL. Misalnya, jika nama DLL adalah mylibrary.dll, nilai atribut nama yang digunakan dalam <elemen assemblyIdentity> manifes mungkin juga mylibrary. Dalam beberapa kasus, ketika pustaka memiliki ekstensi selain .dll (misalnya, proyek Kontrol ActiveX MFC membuat pustaka .ocx) manifes rakitan eksternal dapat dibuat. Dalam hal ini, nama rakitan dan manifesnya harus berbeda dari nama DLL (misalnya, MyAssembly, MyAssembly.manifest, dan mylibrary.ocx). Namun, masih disarankan untuk mengganti nama pustaka tersebut agar memiliki extension.dll dan menyematkan manifes sebagai sumber daya untuk mengurangi biaya pemeliharaan perakitan ini di masa mendatang. Untuk informasi selengkapnya tentang cara sistem operasi mencari rakitan privat, lihat Urutan Pencarian Perakitan.

Perubahan ini dapat memungkinkan penyebaran DLL yang sesuai sebagai rakitan privat di folder lokal aplikasi atau sebagai rakitan bersama di cache perakitan WinSxS. Beberapa langkah harus diikuti untuk mencapai perilaku runtime yang benar dari assembly baru ini; mereka dijelaskan dalam Panduan untuk Membuat Rakitan Berdampingan. Setelah rakitan ditulis dengan benar, rakitan dapat disebarkan sebagai rakitan bersama atau privat bersama dengan aplikasi yang bergantung padanya. Saat menginstal rakitan berdampingan sebagai rakitan bersama, Anda dapat mengikuti panduan yang diuraikan dalam Menginstal Rakitan Win32 untuk Berbagi Berdampingan di Windows XP atau menggunakan modul penggabungan. Saat menginstal rakitan berdampingan sebagai rakitan privat, Anda dapat menyalin DLL, sumber daya, dan manifes perakitan yang sesuai sebagai bagian dari proses penginstalan ke folder lokal aplikasi di komputer target, memastikan bahwa perakitan ini dapat ditemukan oleh pemuat pada runtime (lihat Urutan Pencarian Perakitan). Cara lain adalah menggunakan Penginstal Windows dan mengikuti panduan yang diuraikan dalam Menginstal Rakitan Win32 untuk Penggunaan Privat Aplikasi di Windows XP.

Baca juga

Membangun aplikasi terisolasi C/C++
Membangun Aplikasi Terisolasi C/C++ dan Rakitan Berdampingan