【问题标题】:Configuring ClickOnce Package on Release在发布时配置 ClickOnce 包
【发布时间】:2021-02-11 14:03:23
【问题描述】:

我正在进行从旧的手动实施的 ci/cd 解决方案到 Azure DevOps 的管道迁移。 我仍在重复使用一些预构建的功能/流程。

例如。就像他们如何将所有解决方案打包为工件一样。

我正在尽量减少代码更改。

构建管道创建一个 ClickOnce 包.zip

然后在发布阶段,应用程序文件中的myapp.exe.config 通过 XML-Document-Transform 进行转换。此外,应用程序清单<ApplicationName>.application 通过 Powershell 手动编辑。 <deploymentProvider codebase="http://1.1.1.1/samplefolder/myapp.application" /> 在发布时根据将要部署到的环境/路径进行更改。

应用程序清单

<asmv1:assembly ...>
<deployment ...>
    <subscription>
      <update>
        <beforeApplicationStartup />
      </update>
    </subscription>
    <deploymentProvider codebase="http://1.1.1.1/samplefolder/myapp.application" />
</deployment>
</asmv1:assembly>

现在我了解到这种方法需要对整个包进行重新签名。他们有一个自定义的.exe 文件来重新签署整个包(不是mage.exe)。不幸的是,我不能重用上述可执行文件来重新签名。

我只有他们的证书指纹。但我不知道如何处理它。

问题:

  1. 我还有哪些其他选项可以重新签署包?
  2. 有没有更好的方法来做到这一点?我是否必须为此解决方案进行另一个构建步骤?

【问题讨论】:

  • 我找到了这个第 3 方扩展:Packaging & Deployment Tools,它可以使用 MAGE.EXE 应用程序重新签名和发布单击一次的包。但是,对于自定义 .exe 认证文件,很抱歉我没有找到解决方案。顺便说一句,如果您需要与管道代理交互以重新签署包,您可以尝试使用self-hosted agent 来构建此解决方案。
  • 它不是免费软件,但我之前使用过 Advanced Installer 来完成此类任务。您可以使用您想要的任何签名重新签署包。我敢肯定,也可能有一种免费软件方式可以做到这一点,但就重新打包者而言,我对 Advanced Installer 相当满意。

标签: azure-devops clickonce azure-pipelines-release-pipeline signing


【解决方案1】:

我已成功使用dotnet mage 在发布时签署了 ClickOnce Appmanifest (*.application) 和 *.exe.manifest 文件。我通过在安全文件中添加证书(.pfx.p12)文件并在管道变量中添加证书密码来完成此操作。

  1. 使用 .NET Core 任务指定使用版本 5.x。
  2. 可选步骤通过dotnet tool update --global microsoft.dotnet.mage --version 5.0.0重新安装
  3. 在 powershell 中运行以下命令
  ## Signing the exe.manifest file
  dotnet mage -update "<folder>/Application Files/<assembly folder name>/<assemblyname>.exe.manifest" -fd "<folder>/Application Files/<folder>" -CertFile "$(SignKey.secureFilePath)" -Password "$(SignKeyPassword)"

  ## Signing the .Application file
  dotnet mage -update "<the .Application full path>" -pu "$publisherURL" -pub "$(PublisherDetails)" -appmanifest "Application Files/<assembly folder name>/<assemblyname>.exe.manifest" -CertFile "$(SignKey.secureFilePath)" -Password "$(SignKeyPassword)"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多