Bagikan melalui


Panduan penyebaran Windows App SDK untuk aplikasi mandiri

Proyek Windows App SDK bergantung pada kerangka kerja secara default. Untuk beralih ke penyebaran mandiri, ikuti langkah-langkah di bawah ini (istilah yang bergantung pada kerangka kerja dan mandiri dijelaskan dalam gambaran umum penyebaran Windows App SDK).

  • Di Visual Studio, klik kanan simpul proyek aplikasi, dan klik Edit File Proyek untuk membuka file proyek aplikasi untuk pengeditan. Untuk proyek C++, pertama-tama klik Bongkar Proyek.
  • Dalam file proyek aplikasi, di dalam utama PropertyGroup, tambahkan <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained> seperti yang ditunjukkan pada cuplikan layar di bawah ini.

Screenshot showing the WindowsAppSDKSelfContained property set in a project file.

  • Untuk proyek yang dikemas, dalam file proyek aplikasi, di akhir file sebelum penutupan </Project>, tambahkan yang ditunjukkan Target di bawah ini.
  <Target Name="_RemoveFrameworkReferences" BeforeTargets="_ConvertItems;_CalculateInputsForGenerateCurrentProjectAppxManifest">
    <ItemGroup>
      <FrameworkSdkReference Remove="@(FrameworkSdkReference)" Condition="$([System.String]::Copy('%(FrameworkSdkReference.SDKName)').StartsWith('Microsoft.WindowsAppRuntime.'))" />
    </ItemGroup>
  </Target>

Catatan

Ini adalah solusi untuk bug di Windows App SDK 1.1 dan tidak akan diperlukan dengan Windows App SDK 1.2. Ini hanya diperlukan untuk proyek paket.

  • Simpan dan tutup file proyek.
  • Klik Muat Ulang Proyek.
  • Jika Anda menggunakan Proyek Pengemasan Aplikasi Windows (daripada MSIX proyek tunggal yang Anda dapatkan dengan Aplikasi Kosong, Dikemas (WinUI 3 di Desktop)), maka buat semua perubahan di atas dalam file proyek untuk proyek pengemasan juga.

Catatan

Proyek pustaka tidak boleh diubah. Penyebaran mandiri hanya boleh dikonfigurasi dalam proyek aplikasi (dan, jika berlaku, dalam Proyek Kemasan Aplikasi Windows).

Untuk contoh aplikasi, lihat Sampel penyebaran mandiri Windows App SDK.

Setelah mengatur properti ke WindowsAppSDKSelfContainedtrue dalam file proyek Anda, konten paket Windows App SDK Framework akan diekstrak ke output build Anda, dan disebarkan sebagai bagian dari aplikasi Anda.

Catatan

Aplikasi .NET perlu diterbitkan sebagai mandiri juga agar sepenuhnya mandiri. Lihat sampel ini untuk cara mengonfigurasi .NET mandiri dengan profil publikasi. dotnet publish belum didukung dengan Windows App SDK 1.1.

Catatan

Aplikasi C++ perlu menggunakan CRT hibrid serta untuk sepenuhnya mandiri. Mengimpor HybridCRT.props dari Directory.Build.props adalah cara yang disarankan untuk mengonfigurasinya untuk semua proyek dalam solusi (lihat contoh di Directory.Build.props). Aplikasi paket juga harus diatur <UseCrtSDKReferenceStaticWarning>false</UseCrtSDKReferenceStaticWarning> dalam file proyek mereka. Lihat aplikasi sampel penyebaran mandiri untuk cara menggunakan CRT hibrid.

Jika aplikasi Anda dipaketkan (untuk info selengkapnya, lihat Gambaran umum penyebaran), maka dependensi Windows App SDK akan disertakan sebagai konten di dalam paket MSIX. Menyebarkan aplikasi masih memerlukan pendaftaran paket MSIX seperti aplikasi paket lainnya.

Jika aplikasi Anda dikemas dengan lokasi eksternal atau tidak dikemas, maka dependensi Windows App SDK disalin di samping .exe di output build Anda. Anda dapat menyebarkan xcopy file yang dihasilkan, atau menyertakannya dalam alat penginstal kustom.

Dependensi pada paket MSIX tambahan

Sejumlah kecil API di Windows App SDK mengandalkan paket MSIX tambahan yang mewakili fungsionalitas sistem operasi (OS) penting.

Itu berarti bahwa jika Anda ingin menggunakan API tersebut di aplikasi mandiri, maka Anda memiliki opsi berikut:

  1. Anda dapat membuat fungsionalitas Anda opsional, dan menyalakannya hanya jika dan jika memungkinkan. Memanggil metode IsSupported API (PushNotificationManager.IsSupported dan AppNotificationManager.IsSupported) akan memungkinkan Anda memeriksa secara dinamis pada runtime apakah API tersedia untuk aplikasi panggilan pada sistem yang dijalankannya atau tidak.
    • Ini memungkinkan penggunaan API yang aman, kondisional, opsional tanpa mengorbankan kesederhanaan penyebaran mandiri Anda.
    • Hanya jika layanan OS diinstal di luar penyebaran aplikasi Anda akan menyalakan fungsionalitas yang sesuai. Tetapi pada kenyataannya ada beberapa kasus di mana API akan bekerja bahkan tanpa paket Singleton hadir; jadi memanggil IsSupported untuk memeriksa sering kali merupakan ide yang baik.
  2. Sebarkan paket MSIX yang diperlukan sebagai bagian dari penginstalan aplikasi Anda.
    • Ini memungkinkan Anda untuk bergantung pada API dalam semua skenario. Tetapi mengharuskan penyebaran paket dependensi MSIX sebagai bagian dari penyebaran aplikasi Anda dapat membahayakan kesederhanaan penyebaran mandiri.
  3. Jangan gunakan API.
    • Pertimbangkan API alternatif yang menyediakan fungsionalitas serupa tanpa persyaratan penyebaran tambahan.

Memilih keluar dari (atau ke) dukungan UndockedRegFreeWinRT otomatis

Properti proyek WindowsAppSdkUndockedRegFreeWinRTInitialize diperkenalkan dalam versi 1.2 dari Windows App SDK (dari saluran stabil). Jika properti tersebut diatur ke true , properti tersebut memastikan bahwa implementasi Windows App SDK dari Windows Runtime bebas pendaftaran yang tidak ditambatkan (UndockedRegFreeWinRT) diaktifkan secara otomatis saat pengaktifan aplikasi. Dukungan tersebut diperlukan oleh aplikasi mandiri yang tidak dikemas.

Default WindowsAppSdkUndockedRegFreeWinRTInitialize ke true jika WindowsAppSDKSelfContained benardan WindowsPackageType tidak adadan (pada versi 1.2 dari Windows App SDK) Properti proyek OutputType diatur ke Exe atau WinExe (artinya, proyek menghasilkan executable). Kondisi terakhir itu adalah mencegah penambahan dukungan UndockedRegFreeWinRT otomatis ke DALAM DLL pustaka kelas dan non-executable lainnya secara default. Jika Anda memerlukan dukungan UndockedRegFreeWinRT otomatis dalam non-executable (misalnya, DLL pengujian yang dimuat oleh proses host yang dapat dieksekusi yang tidak menginisialisasi UndockedRegFreeWinRT), maka Anda dapat secara eksplisit mengaktifkannya di proyek Anda dengan <WindowsAppSdkUndockedRegFreeWinRTInitialize>true</WindowsAppSdkUndockedRegFreeWinRTInitialize>.