如何在Azure管道上签署UWP应用程序?
关于为UWP设置Azure管道的问题没有说明如何对包进行签名。它确实说证书文件应该在回购协议中,但它没有解释如何使用该证书对包进行签名 所以我的问题是如何在Azure管道上签署UWP包?如何在Azure管道上签署UWP应用程序?,uwp,certificate,azure-pipelines-build-task,Uwp,Certificate,Azure Pipelines Build Task,关于为UWP设置Azure管道的问题没有说明如何对包进行签名。它确实说证书文件应该在回购协议中,但它没有解释如何使用该证书对包进行签名 所以我的问题是如何在Azure管道上签署UWP包? 我是否应该创建一个powershell脚本来运行SignTool?取决于您想对应用程序执行什么操作。我目前使用signtool使用我们的内部证书进行签名 signtool sign /a /d "{certName}" /fd sha256 /n "{publisherName}" /td sha256 /tr
我是否应该创建一个powershell脚本来运行
SignTool
?取决于您想对应用程序执行什么操作。我目前使用signtool使用我们的内部证书进行签名
signtool sign /a /d "{certName}" /fd sha256 /n "{publisherName}" /td sha256 /tr "http://timestamp.comodoca.com" /v "$(TargetPath)"
请看
您还可以使用WACK验证应用程序,然后安装部署期间生成的证书
基本上,完成这些任务就可以了
# Universal Windows Platform
# Build a Universal Windows Platform project using Visual Studio.
# Add steps that test and distribute an app, save build artifacts, and more:
# https://aka.ms/yaml
# A pipeline with no CI trigger
trigger: none
pr: none
name: $(MajorVersion).$(MinorVersion).$(date:yy)$(DayOfYear)$(rev:.r)
pool:
vmImage: 'windows-latest'
variables:
- group: uwp-pipeline
- name: solution
value: '**/*.sln'
- name: buildPlatform
value: 'x86|x64'
- name: buildConfiguration
value: 'Release'
- name: appxPackageDir
value: '$(build.artifactStagingDirectory)\AppxPackages\\'
- name: MajorVersion
value: 1
- name: MinorVersion
value: 0
- name: customBuildNumber
value: '$(MajorVersion).$(MinorVersion).$(date:yy)$(DayOfYear)$(rev:.r)'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: DownloadSecureFile@1
name: mySecureFile
displayName: 'Download CA certificate'
inputs:
secureFile: '$(signingCert.secureFilePath)'
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
Write-Host "Start adding the PFX file to the certificate store."
$pfxpath = '$(mySecureFile.secureFilePath)'
$password = '$(signingCert.password)'
Add-Type -AssemblyName System.Security
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($pfxpath, $password, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]"PersistKeySet")
$store = new-object system.security.cryptography.X509Certificates.X509Store -argumentlist "MY", CurrentUser
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]"ReadWrite")
$store.Add($cert)
$store.Close()
- task: VersionAPPX@2
inputs:
Path: '$(Build.SourcesDirectory)'
VersionNumber: '$(Build.BuildNumber)'
InjectVersion: False
VersionRegex: '(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])(\.(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])){3}'
OutputVersion: 'OutputedVersion'
- 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="$(signingCert.thumbprint)"
/p:PackageCertificateKeyFile="$(mySecureFile.secureFilePath)"
/p:PackageCertificatePassword="$(signingCert.password)"'
- 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)'
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(build.artifactstagingdirectory)'
includeRootFolder: true
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
replaceExistingArchive: true
- task: AppCenterDistribute@3
inputs:
serverEndpoint: 'release to app center'
appSlug: '$(appSlug)'
buildVersion: '$(Build.BuildNumber)'
appFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
releaseNotesOption: 'input'
releaseNotesInput: 'New release!'
destinationType: 'groups'
distributionGroupId: '$(distributionGroupId)'
我曾就此写过一篇详细的文章,请在这里随意阅读:取决于你想对应用程序做什么。我目前使用signtool与我们的内部证书进行签名。您也可以使用WACK验证应用程序,然后安装在安装过程中生成的证书deploy@McNline我刚看到这个帖子。您可以使用Azure管道中的一个本地服务器上的证书来签署应用程序吗?如果是这样的话,我想了解更多。所以你是说我应该在powershell脚本中使用SignTool。我不明白为什么关于azure管道的文档没有明确地这么说。甚至是为什么没有任务而没有ps1脚本。有不同的方法来实现它。发布UWP项目时,会自动创建证书。我通常在部署之前在本地签名。但是,是的,如果您创建了一个在管道上运行的PS脚本,您应该会很好,您不能使用VS2019创建证书吗?为什么需要使用powershell生成?有什么不同吗?嗨,Sibeesh Venu。我使用你的管道,但我在鲍威尔任务中出错了。错误为:“使用“3”参数调用“导入”时发生异常:”X509Certificate在此平台上是不可变的。使用等价的构造函数来代替。”。有什么想法吗?