Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt Azure Pipelines gebruiken om geautomatiseerde builds te maken voor UWP-projecten. In dit artikel bekijken we verschillende manieren om dit te doen. We laten u ook zien hoe u deze taken uitvoert met behulp van de opdrachtregel, zodat u kunt integreren met elk ander buildsysteem.
Een nieuwe Azure-pijplijn maken
Meld u eerst aan voor Azure Pipelines als u dit nog niet hebt gedaan.
Maak vervolgens een pijplijn die u kunt gebruiken om uw broncode te bouwen. Zie voor een zelfstudie over het maken van een pijplijn voor een GitHub-opslagplaats Maak je eerste pijplijn. Azure Pipelines ondersteunt de typen opslagplaatsen die in dit artikel worden vermeld.
Een geautomatiseerde build instellen
We beginnen met de standaard-UWP-builddefinitie die beschikbaar is in Azure Dev Ops en laten u vervolgens zien hoe u de pijplijn configureert.
Kies in de lijst met builddefinitiesjablonen de sjabloon Universeel Windows-platform.
Deze sjabloon bevat de basisconfiguratie voor het bouwen van uw UWP-project:
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'x86|x64|ARM'
buildConfiguration: 'Release'
appxPackageDir: '$(build.artifactStagingDirectory)\AppxPackages\\'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
platform: 'x86'
solution: '$(solution)'
configuration: '$(buildConfiguration)'
msbuildArgs: '/p:AppxBundlePlatforms="$(buildPlatform)" /p:AppxPackageDir="$(appxPackageDir)" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload'
De standaardsjabloon probeert het pakket te ondertekenen met het certificaat dat is opgegeven in het .csproj-bestand. Als u uw pakket wilt ondertekenen tijdens de build, moet u toegang hebben tot de persoonlijke sleutel. Anders kunt u ondertekening uitschakelen door de parameter /p:AppxPackageSigningEnabled=false toe te voegen aan de sectie msbuildArgs in het YAML-bestand.
Uw projectcertificaat toevoegen aan de beveiligde bestandsbibliotheek
U moet indien mogelijk voorkomen dat u certificaten naar uw opslagplaats verzendt, en standaard negeert git ze. Voor het beheren van de veilige verwerking van gevoelige bestanden, zoals certificaten, ondersteunt Azure DevOps de functie voor beveiligde bestanden .
Een certificaat uploaden voor uw geautomatiseerde build:
Vouw in Azure Pipelines Pipelines uit in het navigatiedeelvenster en klik op Bibliotheek.
Klik op het tabblad Bestanden beveiligen en klik vervolgens op + Beveiligd bestand.
Blader naar het certificaatbestand en klik op OK.
Nadat u het certificaat hebt geüpload, selecteert u het om de eigenschappen ervan weer te geven. Schakel onder Pijplijnmachtigingen de wisselknop Autoriseren in voor gebruik in alle pijplijnen .
Als de persoonlijke sleutel in het certificaat een wachtwoord heeft, raden we u aan uw wachtwoord op te slaan in Azure Key Vault en het wachtwoord vervolgens te koppelen aan een variabele groep. U kunt de variabele gebruiken om toegang te krijgen tot het wachtwoord vanuit de pijplijn. Houd er rekening mee dat een wachtwoord alleen wordt ondersteund voor de persoonlijke sleutel; het gebruik van een certificaatbestand dat zelf met een wachtwoord is beveiligd, wordt momenteel niet ondersteund.
Opmerking
Vanaf Visual Studio 2019 wordt er geen tijdelijk certificaat meer gegenereerd in UWP-projecten. Als u certificaten wilt maken of exporteren, gebruikt u de PowerShell-cmdlets die in dit artikel worden beschreven.
De build-taak voor de build-oplossing configureren
Met deze taak wordt elke oplossing gecompileerd die zich in de werkmap bevindt voor binaire bestanden en het uitvoer-app-pakketbestand produceert. Deze taak maakt gebruik van MSBuild-argumenten. U moet de waarde van deze argumenten opgeven. Gebruik de volgende tabel als richtlijn.
| MSBuild-argument | Waarde | Beschrijving |
|---|---|---|
| AppxPackageDir | $(Build.ArtifactStagingDirectory)\AppxPackages | Hiermee definieert u de map voor het opslaan van de gegenereerde artefacten. |
| AppxBundlePlatforms | $(Build.BuildPlatform) | Hiermee kunt u de platformen definiëren die in de bundel moeten worden opgenomen. |
| AppxBundle | Altijd | Hiermee maakt u een .msixbundle/.appxbundle met de .msix/.appx bestanden voor het opgegeven platform. |
| UapAppxPackageBuildMode | StoreUpload | Hiermee genereert u het .msixupload/.appxupload-bestand en de map _Test voor sideloading. |
| UapAppxPackageBuildMode | CI | Hiermee wordt alleen het .msixupload/.appxupload-bestand gegenereerd. |
| UapAppxPackageBuildMode | SideloadOnly | Hiermee wordt de folder _Test gegenereerd voor alleen sideloading. |
| AppxPackageSigningEnabled | waar | Schakelt pakketondertekening in. |
| Pakketcertificaatthumbprint | Vingerafdruk van het certificaat | Deze waarde moet overeenkomen met de vingerafdruk in het handtekeningcertificaat of een lege tekenreeks zijn. |
| PakketCertificaatSleutelBestand | Pad | Het pad naar het te gebruiken certificaat. Dit wordt opgehaald uit de metagegevens van het beveiligde bestand. |
| Pakketcertificaatwachtwoord | Wachtwoord | Het wachtwoord voor de persoonlijke sleutel in het certificaat. U wordt aangeraden uw wachtwoord op te slaan in Azure Key Vault- en het wachtwoord te koppelen aan variabelegroep. U kunt de variabele doorgeven aan dit argument. |
De build configureren
Als u uw oplossing wilt bouwen met behulp van de opdrachtregel of met een ander buildsysteem, voert u MSBuild uit met deze argumenten.
/p:AppxPackageDir="$(Build.ArtifactStagingDirectory)\AppxPackages\\"
/p:UapAppxPackageBuildMode=StoreUpload
/p:AppxBundlePlatforms="$(Build.BuildPlatform)"
/p:AppxBundle=Always
Pakketondertekening configureren
Als u het MSIX-pakket (of .appx) wilt ondertekenen, moet de pijplijn het handtekeningcertificaat ophalen. Voeg hiervoor een DownloadSecureFile-taak toe voorafgaand aan de VSBuild-taak.
Hiermee hebt u toegang tot het handtekeningcertificaat via signingCert.
- task: DownloadSecureFile@1
name: signingCert
displayName: 'Download CA certificate'
inputs:
secureFile: '[Your_Pfx].pfx'
Werk vervolgens de VSBuild-taak bij om te verwijzen naar het handtekeningcertificaat:
- task: VSBuild@1
inputs:
platform: 'x86'
solution: '$(solution)'
configuration: '$(buildConfiguration)'
msbuildArgs: '/p:AppxBundlePlatforms="$(buildPlatform)"
/p:AppxPackageDir="$(appxPackageDir)"
/p:AppxBundle=Always
/p:UapAppxPackageBuildMode=StoreUpload
/p:AppxPackageSigningEnabled=true
/p:PackageCertificateThumbprint=""
/p:PackageCertificateKeyFile="$(signingCert.secureFilePath)"'
Opmerking
Het argument PackageCertificateThumbprint is opzettelijk ingesteld op een lege tekenreeks als voorzorgsmaatregel. Als de vingerafdruk is ingesteld in het project, maar niet overeenkomt met het handtekeningcertificaat, mislukt de build met de volgende fout: Certificate does not match supplied signing thumbprint.
Parameters controleren
De parameters die zijn gedefinieerd met de $() syntaxis zijn variabelen die zijn gedefinieerd in de builddefinitie en worden gewijzigd in andere buildsystemen.
Zie Vooraf gedefinieerde buildvariabelenom alle vooraf gedefinieerde variabelen weer te geven.
De taak Build-artefacten publiceren configureren
De standaard-UWP-pijplijn slaat de gegenereerde artefacten niet op. Als u de publicatiemogelijkheden wilt toevoegen aan uw YAML-definitie, voegt u de volgende taken toe.
- task: CopyFiles@2
displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
inputs:
SourceFolder: '$(system.defaultworkingdirectory)'
Contents: '**\bin\$(BuildConfiguration)\**'
TargetFolder: '$(build.artifactstagingdirectory)'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)'
U kunt de gegenereerde artefacten zien in de Artifacts optie van de pagina met buildresultaten.
Omdat we het argument UapAppxPackageBuildMode hebben ingesteld op StoreUpload, bevat de map artefacten het pakket voor verzending naar de Store (.msixupload/.appxupload). Houd er rekening mee dat u ook een gewoon app-pakket (.msix/.appx) of een app-bundel (.msixbundle/.appxbundle/) kunt verzenden naar de Store. Voor het doel van dit artikel gebruiken we het .appxupload-bestand.
Bundelfouten aanpakken
Als u meer dan één UWP-project aan uw oplossing toevoegt en vervolgens probeert een bundel te maken, krijgt u mogelijk een foutmelding zoals deze.
MakeAppx(0,0): Error : Error info: error 80080204: The package with file name "AppOne.UnitTests_0.1.2595.0_x86.appx" and package full name "8ef641d1-4557-4e33-957f-6895b122f1e6_0.1.2595.0_x86__scrj5wvaadcy6" is not valid in the bundle because it has a different package family name than other packages in the bundle
Deze fout wordt weergegeven omdat op oplossingsniveau niet duidelijk is welke app in de bundel moet worden weergegeven. U kunt dit probleem oplossen door elk projectbestand te openen en de volgende eigenschappen toe te voegen aan het einde van het eerste <PropertyGroup>-element.
| Project | Eigenschappen |
|---|---|
| Applicatie | <AppxBundle>Always</AppxBundle> |
| UnitTests | <AppxBundle>Never</AppxBundle> |
Verwijder vervolgens het argument AppxBundle MSBuild uit de buildstap.