Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Následující tabulka uvádí různé argumenty nástroje MSBuild, které můžete definovat pro nastavení kanálu sestavení.
| Argument pro MSBuild | Hodnota | Popis |
|---|---|---|
| AppxPackageDir | $(Build.ArtifactStagingDirectory)\AppxPackages | Definuje složku pro uložení vygenerovaných artefaktů. |
| AppxBundlePlatforms | $(Build.BuildPlatform) | Umožňuje definovat platformy, které se mají zahrnout do sady. |
| AppxBundle | Vždy | Vytvoří soubor .msixbundle/.appxbundle se soubory .msix/.appx pro zadanou platformu. |
| UapAppxPackageBuildMode (režim vytváření balíčku) | StoreUpload | Vygeneruje soubor .msixupload/.appxupload a složku _Test pro postranní načtení. |
| UapAppxPackageBuildMode (režim vytváření balíčku) | CI | Vygeneruje pouze soubor .msixupload/.appxupload. |
| UapAppxPackageBuildMode (režim vytváření balíčku) | SideloadOnly | Vygeneruje složku _Test pouze pro zkušební načtení. |
| Povolení podepisování balíčku Appx | pravda | Povolí podepisování balíčků. |
| OtiskCertifikátuBalíčku | Otisk certifikátu | Tato hodnota musí odpovídat kryptografickému otisku v podpisovém certifikátu nebo musí být prázdný řetězec. |
| SouborKlíčeCertifikátuBalíčku | Cesta | Cesta k certifikátu, který se má použít. Tato hodnota se načte z metadat zabezpečených souborů. |
| Heslo balíčku certifikátu | Heslo | Heslo pro privátní klíč v certifikátu. Doporučujeme uložit heslo ve službě Azure Key Vault a propojit ho se skupinou proměnných. Proměnnou můžete předat do tohoto argumentu. |
Před sestavením projektu balení stejným způsobem, jakým průvodce ve Visual Studiu využívá příkazový řádek MSBuild, může proces sestavení nastavit verzi balíčku MSIX úpravou atributu Version elementu Package v souboru Package.appxmanifest. Ve službě Azure Pipelines toho lze dosáhnout pomocí výrazu pro nastavení proměnné čítače, která se zvýší pro každé sestavení, a skriptu PowerShell, který používá třídu System.Xml.Linq.XDocument v .NET ke změně hodnoty atributu.
Ukázkový soubor YAML, který definuje sestavovací kanál MSIX
pool:
vmImage: windows-2019
variables:
buildPlatform: 'x86'
buildConfiguration: 'release'
major: 1
minor: 0
build: 0
revision: $[counter('rev', 0)]
steps:
- powershell: |
# Update appxmanifest. This must be done before the build.
[xml]$manifest= get-content ".\Msix\Package.appxmanifest"
$manifest.Package.Identity.Version = "$(major).$(minor).$(build).$(revision)"
$manifest.save("Msix/Package.appxmanifest")
displayName: 'Version Package Manifest'
- task: MSBuild@1
inputs:
solution: Msix/Msix.wapproj
platform: $(buildPlatform)
configuration: $(buildConfiguration)
msbuildArguments: '/p:OutputPath=NonPackagedApp
/p:UapAppxPackageBuildMode=SideLoadOnly /p:AppxBundle=Never /p:AppxPackageOutput=$(Build.ArtifactStagingDirectory)\MsixDesktopApp.msix /p:AppxPackageSigningEnabled=false'
displayName: 'Package the App'
- task: DownloadSecureFile@1
inputs:
secureFile: 'certificate.pfx'
displayName: 'Download Secure PFX File'
- script: '"C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\signtool"
sign /fd SHA256 /f $(Agent.TempDirectory)/certificate.pfx /p secret $(
Build.ArtifactStagingDirectory)/MsixDesktopApp.msix'
displayName: 'Sign MSIX Package'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
Níže jsou rozpisy různých úloh sestavení definovaných v souboru YAMl:
Konfigurace vlastností generování balíčků
Následující definice nastaví adresář součástí sestavení, platformu a definuje, jestli se má sestavit sada, nebo ne.
/p:AppxPackageDir="$(Build.ArtifactStagingDirectory)\AppxPackages\"
/p:UapAppxPackageBuildMode=SideLoadOnly
/p:AppxBundlePlatforms="$(Build.BuildPlatform)"
/p:AppxBundle=Never
Konfigurace podepisování balíčků
Aby bylo možné podepsat balíček MSIX (nebo APPX), musí proces načíst podpisový certifikát. Uděláte to tak, že před úlohu VSBuild přidáte úlohu DownloadSecureFile.
Tím získáte přístup k podpisovém certifikátu prostřednictvím signingCert.
- task: DownloadSecureFile@1
name: signingCert
displayName: 'Download CA certificate'
inputs:
secureFile: '[Your_Pfx].pfx'
Dále aktualizujte úlohu MSBuildu, která odkazuje na podpisový certifikát.
- task: MSBuild@1
inputs:
platform: 'x86'
solution: '$(solution)'
configuration: '$(buildConfiguration)'
msbuildArgs: '/p:AppxBundlePlatforms="$(buildPlatform)"
/p:AppxPackageDir="$(appxPackageDir)"
/p:AppxBundle=Never
p:UapAppxPackageBuildMode=SideLoadOnly
/p:AppxPackageSigningEnabled=true
/p:PackageCertificateThumbprint=""
/p:PackageCertificateKeyFile="$(signingCert.secureFilePath)"'
Poznámka:
Argument PackageCertificateThumbprint je záměrně nastaven na prázdný řetězec jako preventivní opatření. Pokud je v projektu nastaven otisk prstu, ale neodpovídá podpisovému certifikátu, dojde k chybě sestavení: Certificate does not match supplied signing thumbprint.
Kontrola parametrů
Parametry definované pomocí syntaxe $() jsou proměnné definované v definici sestavení a změní se v jiných systémech sestavení.
Pokud chcete zobrazit všechny předdefinované proměnné, podívejte se na Předdefinované proměnné sestavení.
Nakonfigurujte úlohu Zveřejnění artefaktů sestavení
Výchozí kanál MSIX neukládá vygenerované artefakty. Pokud chcete do definice YAML přidat možnosti publikování, přidejte následující úlohy.
- 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)'
Vygenerované artefakty můžete zobrazit v možnosti Artefakty na stránce výsledků sestavení.
Soubor AppInstaller pro distribuci mimo úložiště
Pokud distribuujete aplikaci mimo Store, můžete využít výhod souboru AppInstaller pro instalaci a aktualizace balíčku.
Soubor .appinstaller, který bude hledat aktualizované soubory na \server\foo
<?xml version="1.0" encoding="utf-8"?>
<AppInstaller xmlns="http://schemas.microsoft.com/appx/appinstaller/2018"
Version="1.0.0.0"
Uri="\\server\foo\MsixDesktopApp.appinstaller">
<MainPackage Name="MyCompany.MySampleApp"
Publisher="CN=MyCompany, O=MyCompany, L=Stockholm, S=N/A, C=Sweden"
Version="1.0.0.0"
Uri="\\server\foo\MsixDesktopApp.msix"
ProcessorArchitecture="x86"/>
<UpdateSettings>
<OnLaunch HoursBetweenUpdateChecks="0" />
</UpdateSettings>
</AppInstaller>
Element UpdateSettings slouží k určení, kdy má systém zkontrolovat aktualizace a zda má uživatele přinutit k aktualizaci. Úplná referenční příručka schématu, včetně podporovaných jmenných prostorů pro každou verzi Windows 10, je k dispozici v dokumentaci na bit.ly/2TGWnCR.
Pokud do projektu balíčku přidáte soubor .appinstaller a nastavíte jeho vlastnost Akce balíčku na Content a vlastnost Kopírovat do výstupního adresáře na hodnotu Kopírovat, pokud je novější, můžete do souboru YAML přidat další úlohu PowerShellu, která aktualizuje atributy verze elementů root a MainPackage a uloží aktualizovaný soubor do přípravného adresáře:
- powershell: |
[Reflection.Assembly]::LoadWithPartialName("System.Xml.Linq")
$doc = [System.Xml.Linq.XDocument]::Load(
"$(Build.SourcesDirectory)/Msix/Package.appinstaller")
$version = "$(major).$(minor).$(build).$(revision)"
$doc.Root.Attribute("Version").Value = $version;
$xName =
[System.Xml.Linq.XName]
"{http://schemas.microsoft.com/appx/appinstaller/2018}MainPackage"
$doc.Root.Element($xName).Attribute("Version").Value = $version;
$doc.Save("$(Build.ArtifactStagingDirectory)/MsixDesktopApp.appinstaller")
displayName: 'Version App Installer File'
Pak byste distribuovali soubor .appinstaller koncovým uživatelům a nechali je poklikáním na tento soubor místo souboru .msix nainstalovat zabalenou aplikaci.
Průběžné nasazování
Samotný instalační soubor aplikace je nekompilovaný soubor XML, který je možné upravit po sestavení, pokud je to potřeba. To usnadňuje použití při nasazování softwaru do více prostředí a když chcete kanál buildu oddělit od procesu vydání.
Pokud vytvoříte potrubí verze v Azure Portalu pomocí šablony "Prázdná úloha" a použijete nedávno nastavené potrubí buildu jako zdroj artefaktu, který má být nasazen, můžete pak do fáze vydání přidat úlohu PowerShellu, abyste dynamicky změnili hodnoty dvou atributů URI v souboru .appinstaller tak, aby odrážely umístění, do kterého je aplikace publikována.
Úloha nasazení, která upravuje URI v souboru .appinstaller
- powershell: |
[Reflection.Assembly]::LoadWithPartialName("System.Xml.Linq")
$fileShare = "\\filesharestorageccount.file.core.windows.net\myfileshare\"
$localFilePath =
"$(System.DefaultWorkingDirectory)\_MsixDesktopApp\drop\MsixDesktopApp.appinstaller"
$doc = [System.Xml.Linq.XDocument]::Load("$localFilePath")
$doc.Root.Attribute("Uri").Value = [string]::Format('{0}{1}', $fileShare,
'MsixDesktopApp.appinstaller')
$xName =
[System.Xml.Linq.XName]"{http://schemas.microsoft.com/appx/appinstaller/2018}MainPackage"
$doc.Root.Element($xName).Attribute("Uri").Value = [string]::Format('{0}{1}',
$fileShare, 'MsixDesktopApp.appx')
$doc.Save("$localFilePath")
displayName: 'Modify URIs in App Installer File'
Ve výše uvedeném úkolu je identifikátor URI nastaven na cestu UNC sdílené složky Azure. Vzhledem k tomu, že operační systém při instalaci a aktualizaci aplikace vyhledá balíček MSIX, přidal jsem do potrubí vydání další skript příkazového řádku, který nejprve namapuje sdílenou složku v cloudu na místní soubory Z:\ drive on the build agent before it uses the xcopy command to copy the .appinstaller and .msix tam:
- script: |
net use Z: \\filesharestorageccount.file.core.windows.net\myfileshare
/u:AZURE\filesharestorageccount
3PTYC+ociHIwNgCnyg7zsWoKBxRmkEc4Aew4FMzbpUl/
dydo/3HVnl71XPe0uWxQcLddEUuq0fN8Ltcpc0LYeg==
xcopy $(System.DefaultWorkingDirectory)\_MsixDesktopApp\drop Z:\ /Y
displayName: 'Publish App Installer File and MSIX package'
Pokud hostujete vlastní místní Azure DevOps Server, můžete samozřejmě publikovat soubory do vlastní interní síťové sdílené složky.
Pokud se rozhodnete publikovat na webový server, můžete MSBuild říct, aby vygeneroval soubor .appinstaller s verzí a stránku HTML, která obsahuje odkaz ke stažení a informace o zabalené aplikaci, zadáním několika dalších argumentů v souboru YAML:
- task: MSBuild@1
inputs:
solution: Msix/Msix.wapproj
platform: $(buildPlatform)
configuration: $(buildConfiguration)
msbuildArguments: '/p:OutputPath=NonPackagedApp /p:UapAppxPackageBuildMode=SideLoadOnly /p:AppxBundle=Never /p:GenerateAppInstallerFile=True
/p:AppInstallerUri=http://yourwebsite.com/packages/ /p:AppInstallerCheckForUpdateFrequency=OnApplicationRun /p:AppInstallerUpdateFrequency=1 /p:AppxPackageDir=$(Build.ArtifactStagingDirectory)/'
displayName: 'Package the App'
Vygenerovaný soubor HTML obsahuje hypertextový odkaz s aktivančním schématem protokolu ms-appinstaller, nezávislým na prohlížeči.
<a href="ms-appinstaller:?source=
http://yourwebsite.com/packages/Msix_x86.appinstaller ">Install App</a>
Pokud nastavíte kanál verze, který publikuje obsah složky drop na intranet nebo na jakýkoli jiný web a webový server podporuje požadavky na bajtový rozsah a je správně nakonfigurovaný, můžou koncoví uživatelé pomocí tohoto odkazu přímo nainstalovat aplikaci bez prvního stažení balíčku MSIX.
Poznámka:
Možnost používat schéma URI (Uniform Resource Identifier) ms-appinstaller (protokol) může být řízena IT specialistou (správcem). Pokud chcete povolit ms-appinstaller ve vaší síti, nastavte zásadu skupiny EnableMSAppInstallerProtocol (/windows/client-management/mdm/policy-csp-desktopappinstaller) na povolenou (viz Zásady CSP – DesktopAppInstaller). Další informace najdete v tématu Instalace aplikací pro Windows 10 z webové stránky.