Paket kerangka kerja MSIX dan dependensi dinamis

Artikel ini memperkenalkan konsep penting yang terkait dengan paket kerangka kerja MSIX. Informasi dalam artikel ini menyediakan konteks yang berguna untuk membantu Anda lebih memahami desain dan tujuan fitur dependensi dinamis di SDK Aplikasi Windows dan di OS Windows 11. Fitur ini memungkinkan aplikasi Anda untuk mereferensikan dan menggunakan paket kerangka kerja MSIX pada waktu proses.

Paket kerangka kerja dan grafik paket

MSIX adalah format paket yang memberikan pengalaman pengemasan dan penyebaran modern. Ini juga menyediakan cara yang bersih dan tepercaya untuk mengemas pustaka, konten, dan komponen yang dapat didistribusikan ulang melalui paket kerangka kerja MSIX. Paket kerangka kerja MSIX memungkinkan aplikasi yang dikemas untuk mengakses komponen melalui satu sumber bersama di perangkat pengguna, alih-alih membundelnya ke dalam paket aplikasi. Paket kerangka kerja umum termasuk SDK Aplikasi Windows (termasuk WinUI3), WinUI2, VCLibs, dan DirectX Runtime.

Dimulai di Windows 8 dan terus melalui Windows 10 dan Windows 11, setiap proses memiliki grafik paket yang menyediakan daftar semua paket yang tersedia untuk aplikasi, termasuk kerangka kerja, sumber daya, opsional, dan paket utama. Grafik ini memungkinkan aplikasi memuat DLL, konten, dan deklarasi kelas run-time yang disediakan oleh paket yang direferensikan. Secara historis, grafik ini diperbaiki pada waktu pembuatan proses, dan tidak ada cara untuk mengubahnya pada waktu proses:

  • Untuk aplikasi paket, grafik diinisialisasi berdasarkan dependensi paket yang dideklarasikan dalam elemen PackageDependency dalam manifes paket aplikasi. Saat membuat aplikasi paket, ini biasanya dilakukan untuk Anda selama proses build berdasarkan referensi dan dependensi proyek Anda.
  • Untuk aplikasi yang tidak dikemas, grafik paket kosong, dan tidak dapat diubah. Oleh karena itu, aplikasi yang tidak dikemas terbatas pada pesanan pencarian DLL standar dan tidak dapat mengakses paket kerangka kerja.

Pembatasan grafik paket statis ini diangkat dengan pengenalan dukungan dependensi dinamis di SDK Aplikasi Windows dan di Windows 11. Pengembang dapat menggunakan dependensi dinamis untuk mereferensikan dan menggunakan paket kerangka kerja MSIX dari aplikasi mereka pada waktu proses. Dependensi dinamis menghapus pembatasan grafik paket statis dari aplikasi, dan pengembang dapat memutuskan bagaimana mereka ingin memanfaatkan paket kerangka kerja.

Skenario utama untuk dependensi dinamis

Meskipun dependensi dinamis memungkinkan aplikasi apa pun untuk menambahkan dependensi kerangka kerja paket pada waktu proses, fitur ini terutama dimaksudkan untuk digunakan oleh aplikasi yang dikemas dengan lokasi eksternal atau aplikasi yang tidak dikemas. Aplikasi yang dikemas masih dapat terus menambahkan dependensi statis melalui elemen PackageDependency dalam manifes paket mereka.

Model layanan untuk paket kerangka kerja

Fitur dependensi dinamis mempertahankan integritas alur layanan untuk paket kerangka kerja yang sedang direferensikan dan digunakan secara dinamis pada waktu proses.

Paket kerangka kerja MSIX mendukung layanan dalam model berdampingan, yang berarti setiap versi diinstal di folder versi terpisahnya sendiri. Ini memungkinkan aplikasi yang digunakan untuk dapat tetap aktif dan berjalan bahkan ketika aplikasi yang lebih baru menginstal versi paket kerangka kerja yang lebih baru. OS memiliki logika penghapusan instalasi kapan harus menghapus versi lama dari paket kerangka kerja tertentu, berdasarkan keberadaan referensi waktu penginstalan dan referensi run-time untuk paket.

  • Saat aplikasi diinstal, aplikasi dapat membuat referensi waktu penginstalan ke paket kerangka kerja. Referensi ini menginformasikan OS bahwa aplikasi memiliki dependensi pada paket kerangka kerja yang ditentukan sehingga OS tidak akan menghapus instalan paket kerangka kerja saat aplikasi Anda diinstal.
  • Saat aplikasi perlu menggunakan API atau konten dalam paket kerangka kerja, aplikasi dapat menambahkan referensi run-time ke paket kerangka kerja. Referensi ini menginformasikan OS bahwa paket kerangka kerja dalam penggunaan aktif dan untuk menangani pembaruan versi apa pun secara berdampingan. Jika versi baru paket kerangka kerja diinstal, tetapi aplikasi yang sedang berjalan memiliki versi lama yang digunakan, OS tidak dapat menghapus versi lama sampai semua referensi run-time ke versi yang lebih lama dihapus.

Misalnya, mengingat skenario ini:

  • Aplikasi A sedang berjalan dan menggunakan versi 1.0.0.0 dari paket kerangka kerja tertentu.
  • Aplikasi B diinstal dan memiliki dependensi pada versi 1.0.0.1 dari paket kerangka kerja yang sama.

Dalam skenario ini, kedua versi paket kerangka kerja akan diinstal dan digunakan oleh Aplikasi A dan Aplikasi B. Namun, ketika Aplikasi A ditutup oleh pengguna dan kemudian dimulai ulang, aplikasi akan mengambil paket kerangka kerja versi 1.0.0.1 yang lebih baru. Pada titik ini, persyaratan referensi run-time tidak lagi valid untuk versi 1.0.0.0 dari paket kerangka kerja, dan OS dapat dengan aman menghapus versi 1.0.0.0. Nantinya, ketika Aplikasi A dan Aplikasi B dihapus instalannya oleh pengguna, maka persyaratan referensi waktu penginstalan tidak lagi valid dan aman bagi OS untuk menghapus paket kerangka kerja sepenuhnya.

Untuk aplikasi paket yang menggunakan elemen PackageDependency untuk menentukan referensi statis ke paket kerangka kerja, referensi waktu penginstalan untuk paket kerangka kerja dilacak oleh OS saat aplikasi diinstal atau dihapus instalasinya. Untuk referensi run-time yang dikelola dengan menggunakan fitur dependensi dinamis, OS mengetahui kapan aplikasi yang dipaketkan berjalan dan akan menghindari penghapusan paket kerangka kerja yang digunakan saat yang lebih baru tersedia.