Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Azure管道上签署UWP应用程序?_Uwp_Certificate_Azure Pipelines Build Task - Fatal编程技术网

如何在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

关于为UWP设置Azure管道的问题没有说明如何对包进行签名。它确实说证书文件应该在回购协议中,但它没有解释如何使用该证书对包进行签名

所以我的问题是如何在Azure管道上签署UWP包?
我是否应该创建一个powershell脚本来运行
SignTool

取决于您想对应用程序执行什么操作。我目前使用signtool使用我们的内部证书进行签名

signtool sign /a /d "{certName}" /fd sha256 /n "{publisherName}" /td sha256 /tr "http://timestamp.comodoca.com" /v "$(TargetPath)"
请看

您还可以使用WACK验证应用程序,然后安装部署期间生成的证书


基本上,完成这些任务就可以了

  • 创建证书
  • 下载证书
  • 安装证书
  • 建造
  • 抄袭
  • 公共物品
  • 分发到应用程序中心(如果有)(可选)
  • 这是YAML文件的全部内容,我已经在我的管道中测试并运行了它

    # 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在此平台上是不可变的。使用等价的构造函数来代替。”。有什么想法吗?