Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können GitHub-Aktionen verwenden, um fortlaufende Integrationsbuilds für WinUI-Projekte einzurichten. In diesem Artikel befassen wir uns mit verschiedenen Möglichkeiten, dies zu tun. Außerdem zeigen wir Ihnen, wie Sie diese Aufgaben mithilfe der Befehlszeile ausführen, damit Sie in jedes andere Buildsystem integriert werden können.
Voraussetzungen
- Starten Sie mit einer Single-Project-MSIX-WinUI-App oder migrieren Sie Ihr Projekt, um eine Single-Project-MSIX zu verwenden.
- Registrieren Sie sich für GitHub- und erstellen Sie ein Repository, sofern dies noch nicht geschehen ist.
Schritt 1: Einrichten Ihres Zertifikats
MSIX-Apps müssen angemeldet sein, um installiert zu werden. Falls Sie bereits über ein Zertifikat verfügen, können Sie diesen Schritt überspringen. Sie können ganz einfach ein Testzertifikat erstellen, indem Sie Ihre App in Visual Studio öffnen, mit der rechten Maustaste auf Ihr WinUI-Projekt klicken und "Package and Publish ->Create App Packages" auswählen.
Wählen Sie dann Weiter aus, um zur Signaturmethode Seite zu wechseln, und klicken Sie auf die Schaltfläche Erstellen..., um ein neues Zertifikat zu erstellen. Wählen Sie den Herausgebernamen aus, und das Kennwortfeldleer lassen und das Zertifikat erstellen.
Schließen/abbrechen Sie dann die Dialogfelder, und beachten Sie, dass in Ihrem Projekt eine neue PFX- Datei erstellt wurde. Dies ist das Zertifikat, mit dem Sie Ihren MSIX signieren können!
Schritt 2: Fügen Sie Ihr Zertifikat zu den Geheimnissen der Aktionen hinzu
Sie sollten die Übermittlung von Zertifikaten an Ihr Repository vermeiden, wenn möglich, und Git ignoriert sie standardmäßig. Um die sichere Behandlung vertraulicher Dateien wie Zertifikate zu verwalten, unterstützt GitHub geheimen Schlüssel.
So laden Sie ein Zertifikat für Ihren automatisierten Build hoch:
- Codieren Sie Ihr Zertifikat als Base 64-Zeichenfolge: Öffnen Sie PowerShell in das Verzeichnis, das Ihr Zertifikat enthält, und führen Sie den folgenden Befehl aus, und ersetzen Sie den PFX-Dateinamen durch den Dateinamen Ihres Zertifikats.
$pfx_cert = Get-Content 'App1_TemporaryKey.pfx' -AsByteStream
[System.Convert]::ToBase64String($pfx_cert) | Out-File 'App1_TemporaryKey_Base64.txt'
- Wechseln Sie in Ihrem GitHub-Repository zur Seite Einstellungen, und klicken Sie links auf Geheime Schlüssel.
- Klicken Sie auf Neuen Repositoryschlüssel, nennen Sie ihn
BASE64_ENCODED_PFX, und kopieren/einfügen Sie den Text aus der Textdatei in der PowerShell-Ausgabe in den geheimen Wert.
Schritt 3: Einrichten ihres Workflows
Wechseln Sie als Nächstes in Ihrem Repository zur Registerkarte "Aktionen", und erstellen Sie einen neuen Workflow. Wählen Sie die Option einen Workflow selbst einrichten anstelle einer der Workflowvorlagen.
Kopieren/fügen Sie Folgendes in Ihre Workflowdatei ein, und aktualisieren Sie dann...
- Solution_Name als Name Ihrer Lösung
-
dotnet-version to
8.0.x(oder die .NET-Version, auf die Ihr Projekt abzielt)
Hinweis
Ersetzen Sie im Schritt, in dem das Artefakt hochgeladen wird (der letzte Schritt unten), env.Solution_Name durch github.workspace (Ordner "GitHub Actions Workspace"), wenn die Buildausgabe nicht in einem Ordner landet, der Ihre Lösung enthält.
# This workflow will build, sign, and package a WinUI MSIX desktop application
# built on .NET.
name: WinUI MSIX app
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
strategy:
matrix:
configuration: [Release]
platform: [x64, x86]
runs-on: windows-latest # For a list of available runner types, refer to
# https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on
env:
Solution_Name: your-solution-name # Replace with your solution name, i.e. App1.sln.
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# Install the .NET workload
- name: Install .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
# Add MSBuild to the PATH: https://github.com/microsoft/setup-msbuild
- name: Setup MSBuild.exe
uses: microsoft/setup-msbuild@v2
# Restore the application to populate the obj folder with RuntimeIdentifiers
- name: Restore the application
run: msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration
env:
Configuration: ${{ matrix.configuration }}
# Decode the base 64 encoded pfx and save the Signing_Certificate
- name: Decode the pfx
run: |
$pfx_cert_byte = [System.Convert]::FromBase64String("${{ secrets.BASE64_ENCODED_PFX }}")
$certificatePath = "GitHubActionsWorkflow.pfx"
[IO.File]::WriteAllBytes("$certificatePath", $pfx_cert_byte)
# Create the app package by building and packaging the project
- name: Create the app package
run: msbuild $env:Solution_Name /p:Configuration=$env:Configuration /p:Platform=$env:Platform /p:UapAppxPackageBuildMode=$env:Appx_Package_Build_Mode /p:AppxBundle=$env:Appx_Bundle /p:PackageCertificateKeyFile=GitHubActionsWorkflow.pfx /p:AppxPackageDir="$env:Appx_Package_Dir" /p:GenerateAppxPackageOnBuild=true
env:
Appx_Bundle: Never
Appx_Package_Build_Mode: SideloadOnly
Appx_Package_Dir: Packages\
Configuration: ${{ matrix.configuration }}
Platform: ${{ matrix.platform }}
# Remove the pfx
- name: Remove the pfx
run: Remove-Item -path GitHubActionsWorkflow.pfx
# Upload the MSIX package: https://github.com/marketplace/actions/upload-a-build-artifact
- name: Upload MSIX package
uses: actions/upload-artifact@v4
with:
name: MSIX Package - ${{ matrix.platform }}
path: ${{ env.Solution_Name }}\\Packages
Schritt 4: Bestätigen Sie den Workflow und beobachten Sie seine Ausführung!
Übertragen Sie die Workflow-Datei in Ihren Hauptbranch, wechseln Sie dann zur Registerkarte "Aktionen" in Ihrem GitHub-Repository und beobachten Sie, wie der Workflow ausgeführt wird! Sie sollte erfolgreich ausgeführt werden und Artefakte erstellen, die Ihre integrierte MSIX-App enthalten.
Kompilieren über die Befehlszeile
Wenn Sie Ihre Lösung mithilfe der Befehlszeile oder eines anderen CI-Systems erstellen möchten, führen Sie MSBuild mit diesen Argumenten aus. Die GenerateAppxPackageOnBuild Eigenschaft bewirkt, dass das MSIX-Paket generiert wird.
/p:AppxPackageDir="Packages"
/p:UapAppxPackageBuildMode=SideloadOnly
/p:AppxBundle=Never
/p:GenerateAppxPackageOnBuild=true
Schritt 1: Einrichten ihres Workflows
Wechseln Sie in Ihrem GitHub-Repository zur Registerkarte "Aktionen", und erstellen Sie einen neuen Workflow. Wählen Sie die Option einen Workflow selbst einrichten anstelle einer der Workflowvorlagen.
Kopieren/fügen Sie Folgendes in Ihre Workflowdatei ein, und aktualisieren Sie dann...
- Solution_Name als Name Ihrer Lösung
-
dotnet-version bis
8.0.x(oder die .NET-Version, auf die Ihr Projekt abzielt)
Hinweis
Ersetzen Sie im Schritt, in dem das Artefakt hochgeladen wird (der letzte Schritt unten), env.Solution_Name durch github.workspace (Ordner "GitHub Actions Workspace"), wenn die Buildausgabe nicht in einem Ordner landet, der Ihre Lösung enthält.
# This workflow will build and publish a WinUI unpackaged desktop application
# built on .NET.
name: WinUI unpackaged app
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
strategy:
matrix:
configuration: [Release]
platform: [x64, x86]
runs-on: windows-latest # For a list of available runner types, refer to
# https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on
env:
Solution_Name: your-solution-name # Replace with your solution name, i.e. App1.sln.
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# Install the .NET workload
- name: Install .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
# Add MSBuild to the PATH: https://github.com/microsoft/setup-msbuild
- name: Setup MSBuild.exe
uses: microsoft/setup-msbuild@v2
# Restore the application to populate the obj folder with RuntimeIdentifiers
- name: Restore the application
run: msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration
env:
Configuration: ${{ matrix.configuration }}
# Create the app by building and publishing the project
- name: Create the app
run: msbuild $env:Solution_Name /t:Publish /p:Configuration=$env:Configuration /p:Platform=$env:Platform
env:
Configuration: ${{ matrix.configuration }}
Platform: ${{ matrix.platform }}
# Upload the app
- name: Upload app
uses: actions/upload-artifact@v4
with:
name: Upload app - ${{ matrix.platform }}
path: ${{ env.Solution_Name }}\\bin
Schritt 2: Übernehmen Sie den Workflow, und beobachten Sie, wie er abläuft!
Übertragen Sie die Workflow-Datei in Ihren Hauptbranch, wechseln Sie dann zur Registerkarte "Aktionen" in Ihrem GitHub-Repository und beobachten Sie, wie der Workflow ausgeführt wird! Sie sollte erfolgreich ausgeführt werden und Artefakte erstellen, die Ihre integrierte App enthalten.
Kompilieren über die Befehlszeile
Wenn Sie Ihre Lösung mithilfe der Befehlszeile oder eines anderen CI-Systems erstellen möchten, führen Sie MSBuild mit dem /t:Publish Argument aus.
Azure Pipelines
Wenn Ihr Team Azure DevOps verwendet, können Sie WinUI 3-Apps mit Azure Pipelines erstellen. Die folgende YAML-Pipeline erstellt eine verpackte MSIX WinUI-App auf einem Windows-Agent:
trigger:
- main
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'x64'
buildConfiguration: 'Release'
steps:
- task: UseDotNet@2
displayName: 'Install .NET SDK'
inputs:
packageType: 'sdk'
version: '8.0.x'
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
displayName: 'Build MSIX package'
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
msbuildArgs: |
/p:AppxBundlePlatforms="$(buildPlatform)"
/p:AppxPackageDir="$(Build.ArtifactStagingDirectory)\AppxPackages\\"
/p:AppxBundle=Never
/p:UapAppxPackageBuildMode=SideloadOnly
/p:GenerateAppInstallerFile=false
- task: PublishBuildArtifacts@1
displayName: 'Publish MSIX artifacts'
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)\AppxPackages'
ArtifactName: 'msix-package'
Hinweis
Entfernen Sie bei entpackten Builds die /p:Appx* MSBuild-Argumente, und verwenden Sie dotnet publish anstelle von VSBuild. Ausführliche Informationen finden Sie im obigen Befehlszeilenabschnitt.
Zum Signieren von MSIX-Paketen in einer Pipeline speichern Sie Ihr Zertifikat in Azure Pipelines sicheren Dateien, und verwenden Sie die DownloadSecureFile-Aufgabe, um während des Builds darauf zuzugreifen.
Important
Speichern Sie niemals Signaturzertifikate oder deren Kennwörter in der Quellcodeverwaltung. Verwenden Sie Pipelineschlüsselvariablen für das Zertifikatkennwort und Azure Pipelines Sichere Dateien für das Zertifikat selbst.
Windows developer