Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten przewodnik koncentruje się na jednej pułapce charakterystycznej dla MAUI: manifest źródłowy w elemencie Platforms/Windows/Package.appxmanifest zawiera tokeny $placeholder$, których składnik winapp package nie rozpoznaje. W przypadku platformy MAUI spakuj przy użyciu manifestu wygenerowanego z obj\...\resizetizer\m\Package.appxmanifest.
Konkretny przykładowy projekt MAUI jest dostępny pod adresem samples/maui-app.
Wymagania wstępne
- SDK platformy .NET + obciążenie robocze MAUI (Windows):
winget install Microsoft.DotNet.SDK.10 --source winget dotnet workload install maui-windows - CLI winapp:
winget install Microsoft.winappcli --source winget
1. Tworzenie aplikacji MAUI i publikowanie nagłówka 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. Pakowanie przy użyciu wygenerowanego manifestu MAUI
$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. Opcjonalne: podpisywanie rozpakowanych plików binarnych
winapp sign .\publish\win-x64\mymauiapp.exe .\devcert.pfx --password password
Skrypt walidacyjny (środowisko deweloperskie + ciągła integracja)
Użyj przykładowego skryptu testowego Pester dla MAUI:
.\scripts\test-samples.ps1 -Samples maui-app
To uruchamia samples/maui-app/test.Tests.ps1, które tworzy aplikację MAUI od podstaw, publikuje dane wyjściowe dla systemu Windows, weryfikuje ścieżkę wygenerowanego manifestu resizetizera, tworzy pakiet MSIX za pomocą winapp i podpisuje rozpakowany plik wykonywalny.
Ten sam skrypt jest również podpięty pod wpis macierzy maui-app w .github/workflows/test-samples.yml.