Menggunakan CLI winapp dengan .NET MAUI (Windows)

Panduan ini berfokus pada satu kendala khusus MAUI: manifest sumber di Platforms/Windows/Package.appxmanifest berisi token $placeholder$ yang tidak dapat diuraikan oleh winapp package. Untuk MAUI, paket menggunakan manifes yang dihasilkan dari obj\...\resizetizer\m\Package.appxmanifest.

Proyek sampel MAUI konkret tersedia di samples/maui-app.

Prasyarat

  1. .NET beban kerja SDK + MAUI (Windows):
    winget install Microsoft.DotNet.SDK.10 --source winget
    dotnet workload install maui-windows
    
  2. winapp CLI:
    winget install Microsoft.winappcli --source winget
    

1. Buat aplikasi MAUI dan terbitkan kepala Windows

dotnet new maui -n mymauiapp --no-restore
cd mymauiapp

# The stock template targets every MAUI platform. Keep only Windows when
# maui-windows is the only installed workload.
[xml]$project = Get-Content .\mymauiapp.csproj
$propertyGroup = $project.SelectSingleNode("/*[local-name()='Project']/*[local-name()='PropertyGroup'][1]")
$project.SelectNodes("/*[local-name()='Project']/*[local-name()='PropertyGroup']/*[local-name()='TargetFrameworks']") |
  ForEach-Object { $_.ParentNode.RemoveChild($_) | Out-Null }
$windowsTfm = $project.CreateElement("TargetFrameworks", $project.DocumentElement.NamespaceURI)
$windowsTfm.InnerText = "net10.0-windows10.0.19041.0"
$propertyGroup.PrependChild($windowsTfm) | Out-Null
$project.Save((Resolve-Path .\mymauiapp.csproj).Path)

dotnet publish .\mymauiapp.csproj `
  -c Release `
  -f net10.0-windows10.0.19041.0 `
  -r win-x64 `
  -p:WindowsPackageType=None `
  -p:SelfContained=true `
  -p:WindowsAppSDKSelfContained=true `
  --output .\publish\win-x64

2. Paket menggunakan manifes MAUI yang dihasilkan

$manifest = ".\obj\Release\net10.0-windows10.0.19041.0\win-x64\resizetizer\m\Package.appxmanifest"
if (-not (Test-Path $manifest)) { throw "Resolved manifest not found: $manifest" }

winapp cert generate --manifest $manifest --if-exists overwrite

winapp package .\publish\win-x64 `
  --manifest $manifest `
  --executable mymauiapp.exe `
  --cert .\devcert.pfx

3. Opsional: tandatangani biner yang belum dikemas

winapp sign .\publish\win-x64\mymauiapp.exe .\devcert.pfx --password password

Skrip validasi (dev + CI)

Gunakan sampel skrip uji Pester MAUI:

.\scripts\test-samples.ps1 -Samples maui-app

Perintah ini menjalankan samples/maui-app/test.Tests.ps1, yang membuat aplikasi MAUI dari nol, menghasilkan output Windows, memvalidasi jalur manifes Resizetizer yang dihasilkan, mengemas MSIX dengan winapp, dan menandatangani file eksekusi yang tidak dikemas.

Skrip yang sama juga diintegrasikan ke .github/workflows/test-samples.yml di bawah entri matriks maui-app.