共用方式為


為您的 UWP 應用程式設置自動化建置

您可以使用 Azure Pipelines 來建立 UWP 專案的自動化組建。 在本文中,我們將探討執行此作業的不同方式。 我們也會示範如何使用命令行來執行這些工作,以便與任何其他建置系統整合。

建立新的 Azure Pipeline

請先 註冊 Azure Pipelines,如果您還沒有這樣做。

接下來,建立可用來建置原始程式碼的管線。 如需了解用來建置 GitHub 儲存庫的流程的教學,請參閱 建立您的第一個流程。 Azure Pipelines 支援在本文中列出的 存放庫類型,

設定自動化建置

我們將從 Azure Dev Ops 中可用的預設 UWP 組建定義開始,然後示範如何設定管線。

在組建定義範本清單中,選擇 通用 Windows 平臺 範本。

選取 UWP 樣本

此樣本包含建置 UWP 專案的基本設定:

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'

默認範本會嘗試使用 .csproj 檔案中指定的憑證簽署套件。 如果您想要在組建期間簽署套件,您必須具有私鑰的存取權。 否則,您可以將 參數 /p:AppxPackageSigningEnabled=false 新增至 YAML 檔案中的 msbuildArgs 區段,以停用簽署。

將項目憑證新增至安全檔案庫

如果可能的話,您應該避免將憑證提交至存放庫,而 Git 預設會忽略這些憑證。 若要管理憑證等機密檔案的安全處理,Azure DevOps 支援 安全檔案 功能。

若要上傳自動化組建的憑證:

  1. 在 Azure Pipelines 中,展開瀏覽窗格中的 [Pipelines],然後按一下 [程式庫]

  2. 點選 [保護檔案] 索引標籤,然後點選 [+ 保護檔案]。

    Azure 的螢幕快照,已醒目提示的 [Library] 選項顯示 [安全檔案] 頁面。

  3. 瀏覽憑證檔案,然後點擊 [確定]

  4. 上傳憑證之後,請選取它以檢視其屬性。 在 [管道權限] 底下,啟用 [授權開關] 以便用於所有管道

    [管線許可權] 區段的螢幕快照,其中已選取 [授權以用於所有管線] 選項。

  5. 如果憑證中的私鑰具有密碼,建議您將密碼儲存在 azure Key Vault ,然後將密碼連結至 變數群組。 您可以使用 變數從管線存取密碼。 請注意,只有私鑰才支持密碼;目前不支援使用本身受密碼保護的憑證檔案。

備註

從 Visual Studio 2019 開始,UWP 專案中不再產生暫存憑證。 若要建立或匯出憑證,請使用本文 中所述的 PowerShell Cmdlet

設定「建置解決方案」的建置工作

此工作會將工作資料夾中的任何解決方案編譯為二進位檔,並產生輸出應用程式套件檔案。 此工作會使用 MSBuild 自變數。 您必須指定這些自變數的值。 使用下表做為指南。

MSBuild 自變數 價值 說明
AppxPackageDir $(Build.ArtifactStagingDirectory)\AppxPackages 定義要儲存所產生成品的資料夾。
AppxBundlePlatforms $(Build.BuildPlatform) 可讓您定義要包含在套件組合中的平臺。
AppxBundle 永遠 使用指定平台的 .msix/.appx 檔案來建立 .msixbundle/.appxbundle。
UapAppx封裝建置模式 StoreUpload 生成 .msixupload/.appxupload 檔案和 _Test 資料夾用於側載。
UapAppx封裝建置模式 只產生 .msixupload/.appxupload 檔案。
UapAppx封裝建置模式 SideloadOnly 僅為側載生成_Test資料夾。
AppxPackageSigningEnabled (應用程式封裝簽署啟用) 啟用套件簽署。
套件憑證指紋 憑證指紋 此值 必須 符合簽署憑證中的指紋,或是空字串。
套件證書密鑰檔案 路徑 要使用的憑證路徑。 這會從安全檔案元數據擷取。
套件憑證密碼 密碼 憑證中私鑰的密碼。 我們建議您將密碼儲存在 Azure Key Vault 中,並將密碼連結至 變數群組。 您可以將變數傳遞給這個參數。

設定建置

如果您想要使用命令行或任何其他建置系統來建置方案,請使用這些自變數執行 MSBuild。

/p:AppxPackageDir="$(Build.ArtifactStagingDirectory)\AppxPackages\\"
/p:UapAppxPackageBuildMode=StoreUpload
/p:AppxBundlePlatforms="$(Build.BuildPlatform)"
/p:AppxBundle=Always

設定套件簽署

若要簽署 MSIX(或.appx)封裝,管線必須擷取簽署憑證。 若要這樣做,請在 VSBuild 工作之前新增 DownloadSecureFile 工作。 這可讓您透過 signingCert存取簽署憑證。

- task: DownloadSecureFile@1
  name: signingCert
  displayName: 'Download CA certificate'
  inputs:
    secureFile: '[Your_Pfx].pfx'

接下來,更新 VSBuild 任務來引用簽署憑證:

- 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)"'

備註

PackageCertificateThumbprint 自變數會刻意設定為空字串作為預防措施。 如果在項目設定指紋,但不符合簽署憑證,則組建將會失敗,並出現錯誤:Certificate does not match supplied signing thumbprint

審核參數

使用 $() 語法定義的參數是建置定義中定義的變數,而且在其他建置系統中也會變更。

預設變數

若要檢視所有預先定義的變數,請參閱 預先定義的組建變數

配置發佈構建工件任務

預設UWP管線不會儲存產生的成品。 若要將發佈功能新增至 YAML 定義,請新增下列工作。

- 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)'

您可以在組建結果頁面的 [成果物] 選項中看到產生的成果物。

文物

因為我們已將 UapAppxPackageBuildMode 自變數設定為 StoreUpload,因此 artifacts 資料夾包含提交至 Store 的套件 (.msixupload/.appxupload)。 請注意,您也可以將一般應用程式套件 (.msix/.appx) 或應用程式套件組合 (.msixbundle/.appxbundle/) 提交至市集。 針對本文的目的,我們將使用 .appxupload 檔案。

解決套件組合錯誤

如果您將多個 UWP 專案新增至您的方案,然後嘗試建立套件組合,您可能會收到如下的錯誤。

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

此錯誤會出現,因為在解決方案層級,目前還不清楚套件組合中應該顯示哪個應用程式。 若要解決此問題,請開啟每個項目檔,並在第一個 <PropertyGroup> 項目結尾新增下列屬性。

計畫 性能
應用程式 <AppxBundle>Always</AppxBundle>
UnitTests <AppxBundle>Never</AppxBundle>

然後,從建置步驟中移除 AppxBundle MSBuild 自變數。