Bagikan melalui


panduan penyebaran SDK Aplikasi Windows untuk aplikasi mandiri

Proyek SDK Aplikasi Windows 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 SDK Aplikasi Windows).

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

Cuplikan layar memperlihatkan properti WindowsAppSDKSelfContained yang diatur dalam file proyek.

  • 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 SDK Aplikasi Windows 1.1 dan tidak akan diperlukan dengan SDK Aplikasi Windows 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 aplikasi sampel, lihat SDK Aplikasi Windows sampel penyebaran mandiri.

Setelah mengatur WindowsAppSDKSelfContained properti ke true dalam file proyek Anda, konten paket SDK Aplikasi Windows 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 publishbelum didukung dengan SDK Aplikasi Windows 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 dikemas (untuk informasi selengkapnya, lihat Gambaran umum penyebaran), maka dependensi SDK Aplikasi Windows 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 SDK Aplikasi Windows disalin di samping .exe dalam output build Anda. Anda dapat menyebarkan xcopy file yang dihasilkan, atau menyertakannya dalam alat penginstal kustom.

Dependensi pada paket MSIX tambahan

Sejumlah kecil API dalam SDK Aplikasi Windows 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 SDK Aplikasi Windows (dari saluran stabil). Jika properti tersebut diatur ke true, properti tersebut memastikan bahwa implementasi SDK Aplikasi Windows 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 benar dan WindowsPackageType tidak ada dan (pada versi 1.2 dari SDK Aplikasi Windows) 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>.