- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经搜索了我能想到的所有内容,但找不到解决方案。我有一个 ClickOnce 应用程序,我正在尝试使用我们内部证书颁发机构创建的证书对其进行签名。在我的本地计算机上,我可以毫无问题地对代码进行签名,但是当尝试在 Azure Pipeline 中构建时,我开始遇到问题。
我首先尝试在 VisualStudio 中检查“签署 ClickOnce list ”的典型途径。然后我选择了证书并输入了密码。证书已导入到证书存储中,我可以在本地计算机上进行构建。
在 Azure 中运行管道时,出现错误,由于密码原因,无法导入证书。因此,我将 .pfx 文件作为安全文件添加到 Azure 库中,并向管道中添加了两个任务 - 一个用于下载安全文件,另一个用于导入证书的 Powershell 任务。成功导入证书后,我的 VSBuild 任务开始失败,并出现以下错误。
签名时发生错误:无法签署 {AppName.exe}。 SignTool 错误:签名者的证书对于签名无效。
大多数针对此错误的 Google 结果都是由于证书过期造成的,但我使用的证书是在过去一个月内刚刚生成的,而且过期时间已经有几年了。
我尝试了无数种不同的方法来让这个应用程序签名,所有这些都导致了相同的错误。其中一些尝试包括:
我已经与我们的服务器管理员和 Active Directory 组讨论了这个问题,但没有成功解决这个问题,因为我们的组织主要从事 Web 应用程序。据我所知,这是我们组织中唯一的 clickonce 应用程序。
这个应用程序自 2013 年以来一直存在,仅供内部员工使用,但最近被赛门铁克隔离,因为它没有签名,所以我需要弄清楚如何对其进行签名并使其在 DevOps 中构建。
我们的管道使用本地服务器 (Server 2012 R2)(如果这有助于确定问题)。
编辑:包含我在 .csproj 中尝试过的自定义目标的示例。这是我添加时间戳 url 的最新尝试。我最初尝试不使用时间戳服务器。
此外,我尝试注释掉 AfterCompile 目标。构建将通过该部分,并且实际上会使用 mage.exe 成功签署 list ,但随后在使用signtool.exe 签署 setup.exe 的最后一个命令上会失败。 看来问题出在signtool.exe上,而不一定是证书问题,因为mage.exe可以用它来签名。
<PropertyGroup>
<CertPath>
</CertPath>
<CertPass>
</CertPass>
</PropertyGroup>
<Target Name="AfterCompile" Condition="'$(Configuration)|$(Platform)' != 'Debug|x86' ">
<Exec Command=""C:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\signtool.exe" sign /f "$(CertPath)" /fd sha256 /p $(CertPass) /v /t "http://timestamp.comodoca.com?td=sha256" "$(ProjectDir)obj\$(Platform)\$(ConfigurationName)\$(TargetFileName)"" />
</Target>
<Target Name="SignManifest" AfterTargets="_DeploymentSignClickOnceDeployment" Condition="'$(Configuration)|$(Platform)' != 'Debug|x86' ">
<Exec Command=""C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\mage.exe" -Sign "$(_DeploymentApplicationDir)$(_DeploymentTargetApplicationManifestFileName)" -cf $(CertPath) -pwd $(CertPass)" />
<Exec Command=""C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\mage.exe" -Update "$(PublishDir)$(TargetDeployManifestFileName)" -AppManifest "$(_DeploymentApplicationDir)$(_DeploymentTargetApplicationManifestFileName)"" />
<Exec Command=""C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\mage.exe" -Sign "$(PublishDir)$(TargetDeployManifestFileName)" -cf $(CertPath) -pwd $(CertPass)" />
<Exec Command=""C:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\signtool.exe" sign /f $(CertPath) /fd sha256 /p $(CertPass) /v /t "http://timestamp.comodoca.com?td=sha256" "$(PublishDir)\setup.exe"" />
</Target>
以及构建日志的相关部分。
最佳答案
免责声明:我是该工具的所有者。
我最近为 Azure Pipelines 制作了一个开源插件,可能会为您解决这个问题,available on the Azure DevOps Marketplace (source is MIT, available on GitHub)。它可以在托管代理或本地代理中运行。
只需照常构建应用程序(无需在构建管道中发布),然后将 ClickOnce Package 任务设置为部署管道中的一个步骤。根据您在任务 UI 中选择的设置,它将创建每个部署的应用程序和部署 list 。文件是使用 UI 中的通配模式指定的,而不是从项目文件中读取。
对于签名,您可以通过指纹指定证书(如果已安装在生成服务器上),也可以将其作为安全文件添加到 Azure DevOps(您可以使用安全管道变量来保护密码)。您还可以指定时间戳服务器。
鉴于您要迁移现有包,我建议您在上传到部署位置之前区分新旧 list 以确认它们正确。
编辑:此加载项不使用 Mage,而是使用 MSBuild API 直接创建 ClickOnce list 。我怀疑这与 MSBuild 和(因此)Visual Studio 使用的机制相同。
关于azure - 在 Azure Pipeline 中签署代码时构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63236883/
例如,如果运行 1 正在等待批准并触发运行 2,则应拒绝运行 1。 最佳答案 “待批准”状态具体来自 Approval Gates功能。 虽然您不能在触发新运行时明确拒绝“待批准”步骤,但您可以通过在
在 Azure DevOps Pipelines 中,似乎有两种我无法区分的概念和处理“工件”的方法。 管道工件 https://learn.microsoft.com/en-us/azure/dev
不确定是否有办法做到这一点,但我想查看之前运行的 yaml 管道中的参数,以便查看管道运行时输入或选择的内容。那可能吗?我发现的唯一解决方法是根据每个参数添加标签。 最佳答案 您可以从 Build 查
我正在运行我所有的测试用例,其中一些用例有时会失败,管道检测到它并使步骤和构建失败。这会阻止要执行的下一步(压缩报告文件夹)。我想将该 zip 文件作为电子邮件附件发送。 这是我的 bitbucket
我正在数据工厂中定义管道,我纠正了一些错误。第一个事件是调用 usql 脚本进行一些聚合,我更改了脚本很多时间,但错误仍然是: [{"errorId":"E_CSC_USER_SYNTAXERROR"
我正在尝试使用运行命令VSTS扩展名对VSTS版本定义执行helm命令,但问题是它无法在我配置的自定义生成代理上找到kubeconfig文件。我认为这是因为定义的构建步骤在单独的过程中运行。当我运行
我无法弄清楚 sklearn.pipeline.Pipeline 是如何工作的。 doc 中有一些解释.例如它们是什么意思: Pipeline of transforms with a final e
我在 azure 管道中有两个管道(也称为“构建定义”),一个正在执行系统测试,一个正在执行性能测试。两者都使用相同的测试环境。我必须确保系统测试管道运行时不会触发性能管道,反之亦然。 到目前为止我已
我遵循了这个指令 https://confluence.atlassian.com/bitbucket/use-ssh-keys-in-bitbucket-pipelines-847452940.ht
当使用 YAML 完成另一个管道时尝试触发 Azure 管道。有documentation表明您可以添加管道资源: resources: # types: pipelines | builds |
我正在尝试根据我发布到的每个环境对我的 Web.config 进行文件转换。大多数情况下,一切看起来都很好,直到我在发布管道上部署到我的 UAT 阶段。 在我的构建管道中,这是我正在使用的 YAML
脚本化管道中是否有任何方法可以将某个阶段标记为不稳定,但仅将该阶段显示为不稳定,而不在输出中将每个阶段标记为不稳定? 我可以做这样的事情: node() { stage("Stage1") {
我有针对特定环境(dev、qa、uat)的特定配置文件和另一个根 web.config。部署的代码读取 web.config。所以我一直在尝试复制内容或重命名 Azure Pipelines 中的文件
我的 Jenkins 中有很多 Pipeline 项目。我想将它们转换为多分支管道。是否可以不删除管道并创建新的多分支管道?怎么办? 最佳答案 假设您的管道位于 Jenkinsfile 中,则无需进行
我们正在使用扩展功能以安全的方式在我们的管道中重用模板。为了更轻松地定义模板的参数,我想使用变量,但我觉得这是不可能的。 但由于我在官方文档中找不到答案,所以我在这一轮提问。 我的 yml 文件如下所
如何访问UID Jenkins 管道工作中的变量? 我收到了 null什么时候: pipeline { agent any environment { def user
我正在摆弄管道以尝试减少整体运行时间。我想做的一件事是执行 docker pull ...在开始时,以便以后,当我真正需要它时,它已经为我准备好了。我想将它作为后台工作解雇,并让它在该任务结束后继续存
From here我了解到 Bitbucket Pipeline 支持 ifs 语句。 如何在 if 语句中执行多行块? 这不计算: script: - if [ $BITBUCK
我在运行 Jenkins 服务器(在 docker 容器内)的谷歌云中运行虚拟机。我正在尝试为我的应用程序构建一个 Docker 镜像,并使用 Jenkins 管道将其推送到 Google Conta
在构建和部署 docker image.Getting Unexpected value 'Steps' 在第 27 行之前,我试图将视频文件从 GPM 复制到 app/dist/asset/imag
我是一名优秀的程序员,十分优秀!