Menggunakan winapp CLI dengan .NET

Nota

Panduan ini berfungsi untuk sebagian besar jenis .NET project. Langkah-langkah telah diuji dengan proyek berbasis konsol dan UI seperti WPF.

Panduan ini menunjukkan cara menggunakan CLI winapp dengan aplikasi .NET untuk men-debug dengan identitas paket dan mengemas aplikasi Anda sebagai MSIX.

Identitas paket adalah konsep inti dalam model Windows app. Ini memungkinkan aplikasi Anda untuk mengakses API Windows tertentu (seperti Pemberitahuan, Keamanan, API AI, dll.), merasakan pengalaman pemasangan/penghapusan instalasi yang lebih bersih, dan banyak lagi.

Prasyarat

  1. .NET SDK: Instal SDK .NET:

    winget install Microsoft.DotNet.SDK.10 --source winget
    
  2. winapp CLI: Instal winapp alat melalui winget:

    winget install Microsoft.winappcli --source winget
    

1. Buat aplikasi .NET baru

Mulailah dengan membuat aplikasi konsol .NET sederhana:

dotnet new console -n dotnet-app
cd dotnet-app

Jalankan untuk memastikan semuanya berfungsi:

dotnet run

2. Perbarui kode untuk memeriksa identitas

Pertama, perbarui file project Anda untuk menargetkan versi Windows SDK tertentu. Buka dotnet-app.csproj dan ubah TargetFramework:

<TargetFramework>net10.0-windows10.0.26100.0</TargetFramework>

Sekarang ganti isi dari Program.cs:

using Windows.ApplicationModel;

try
{
    var package = Package.Current;
    var familyName = package.Id.FamilyName;
    Console.WriteLine($"Package Family Name: {familyName}");
}
catch (InvalidOperationException)
{
    Console.WriteLine("Not packaged");
}

3. Jalankan tanpa identitas

dotnet run

Anda akan melihat "Tidak dibungkus".

4. Inisialisasi project dengan winapp CLI

Perintah winapp init akan otomatis mendeteksi file .csproj dan menjalankan penyiapan .NET tertentu.

winapp init

Ketika diminta:

  • Nama paket: Tekan Enter untuk menerima default
  • Nama penerbit: Tekan Enter untuk menerima pengaturan standar atau masukkan nama Anda
  • Deskripsi: Tekan Enter untuk menerima default atau memasukkan deskripsi
  • Versi: Tekan Enter untuk menerima 1.0.0.0
  • Titik masuk: Tekan Enter untuk menerima default (dotnet-app.exe)
  • penyiapan Windows App SDK: Pilih Stabil, Pratinjau, atau Eksperimental

Perintah ini:

  • Di .csproj, TargetFramework diperbarui ke TFM Windows yang didukung (jika diperlukan)
  • Menambahkan referensi paket NuGet Microsoft.WindowsAppSDK dan Microsoft.Windows.SDK.BuildTools
  • Membuat folder appxmanifest.xml dan Assets untuk identitas aplikasi Anda

Nota

Tidak seperti proyek native/C++, aliran .NET tidak membuat winapp.yaml file. Paket NuGet dikelola langsung lewat .csproj Anda. Gunakan dotnet restore untuk memulihkan paket setelah kloning.

5. Debug menggunakan identitas

  1. Buat executable:

    dotnet build -c Debug
    
  2. Terapkan identitas debug:

    winapp create-debug-identity .\bin\Debug\net10.0-windows10.0.26100.0\dotnet-app.exe
    
  3. Jalankan executable (jangan gunakan dotnet run karena mungkin dibangun kembali):

    .\bin\Debug\net10.0-windows10.0.26100.0\dotnet-app.exe
    

Anda harus melihat:

Package Family Name: dotnet-app_12345abcde

Otomatisasi identitas debug (opsional)

Tambahkan target ini ke file Anda .csproj :

<Target Name="ApplyDebugIdentity" AfterTargets="Build" Condition="'$(Configuration)' == 'Debug'">
    <Exec Command="winapp create-debug-identity &quot;$(TargetDir)$(TargetName).exe&quot;"
          WorkingDirectory="$(ProjectDir)"
          IgnoreExitCode="false" />
</Target>

6. Menggunakan Windows App SDK

Jika Anda menjalankan winapp init, Microsoft.WindowsAppSDK sudah ditambahkan sebagai referensi paket NuGet. Perbarui Program.cs untuk menggunakan WINDOWS APP Runtime API:

using Windows.ApplicationModel;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            var package = Package.Current;
            var familyName = package.Id.FamilyName;
            Console.WriteLine($"Package Family Name: {familyName}");

            var runtimeVersion = Microsoft.Windows.ApplicationModel.WindowsAppRuntime.RuntimeInfo.AsString;
            Console.WriteLine($"Windows App Runtime Version: {runtimeVersion}");
        }
        catch (InvalidOperationException)
        {
            Console.WriteLine("Not packaged");
        }
    }
}

7. Paket dengan MSIX

  1. Bangun untuk rilis:

    dotnet build -c Release
    
  2. Buat sertifikat pengembangan:

    winapp cert generate --if-exists skip
    
  3. Paket dan tanda tangan:

    winapp pack .\bin\Release\net10.0-windows10.0.26100.0 --manifest .\appxmanifest.xml --cert .\devcert.pfx
    
  4. Instal sertifikat (jalankan sebagai administrator):

    winapp cert install .\devcert.pfx
    
  5. Instal dengan mengeklik dua kali file yang dihasilkan .msix .

Tip

  • Microsoft Store menandatangani MSIX untuk Anda, tidak perlu menandatangani sebelum pengiriman.
  • Anda mungkin memerlukan paket MSIX terpisah untuk setiap arsitektur: dotnet build -c Release -r win-x64 atau dotnet build -c Release -r win-arm64.

Mengotomatiskan kemasan MSIX (opsional)

Tambahkan target ini ke .csproj:

<Target Name="PackageMsix" AfterTargets="Build" Condition="'$(Configuration)' == 'Release'">
    <Exec Command="winapp pack &quot;$(TargetDir.TrimEnd('\'))&quot; --cert &quot;$(ProjectDir)devcert.pfx&quot;"
          WorkingDirectory="$(ProjectDir)"
          IgnoreExitCode="false" />
</Target>