如果自签名清单,C# 无法在 Azure 管道中传递构建

Posted

技术标签:

【中文标题】如果自签名清单,C# 无法在 Azure 管道中传递构建【英文标题】:C# Unable pass build in Azure pipeline if self signed the manifest 【发布时间】:2019-10-10 15:06:49 【问题描述】:

我有一个使用 .NET 框架在 Visual Studio 中构建的 WPF 项目。该应用程序将部署在多个位置,以便不同网络上的用户能够运行它并获取更新(发布 -> 应用程序更新 -> 在应用程序启动之前)。

我正在尝试建立一个管道以最终测试应用程序并将其发布到多个位置。为了增加安全性,我决定使用 (Signing -> Sign the ClickOnce manifests) 对清单进行自签名。

根据我的阅读 (What is signing ClickOnce manifests for?),您应该签署一份清单,以向您的用户添加应用程序/更新来自您的安全性。

我的问题是,当 Azure 尝试在管道中构建应用程序时,它会生成以下错误。

短:

Error MSB3323: Unable to find manifest signing certificate in the certificate store

长:

##[error]C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(3222,5): Error MSB3323: Unable to find manifest signing certificate in the certificate store.

Google 解决方案似乎要求我删除此安全功能。 (“Unable to find manifest signing certificate in the certificate store” - even when add new key)

我是否误解了解决方案、自签名的原因,还是我应该寻找其他解决方案? (注意:我们不打算从第三方购买证书。)

有关应用程序的其他信息

Security -> [Checked:true] 启用 ClickOnce 安全设置

还有

安全性 -> 这是一个完全信任的应用程序

如果您需要有关项目/解决方案/构建/Azure 设置/...的其他信息,请告诉我。不确定与该问题相关的内容,我不想在此处转储整个项目。请询问,我会更新。

编辑:

YML 文档。

# ASP.NET Core (.NET Framework)
# Build and test ASP.NET Core projects targeting the full .NET Framework.
# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

【问题讨论】:

你用的是哪个代理?托管代理还是自托管代理?您是否尝试在自托管代理中构建它并检查错误是否仍然存在?也许托管机器不会在证书存储中安装您的证书。 简短回答:我想我使用了托管代理。长答案:我尝试寻找允许我指定托管或自托管但找不到它的设置。这是有关它的更多信息。我使用 Azure 管道。新请求的处理设置为嵌入,我已经在我的帖子中发布了 yml。我应该在哪里查看此设置。 注意:我可以在本地开发机器上毫无问题地构建。 "Agent: Hosted Agent" 刚刚在职位信息中找到 这就是重点。如果您以与本地相同的方式运行签名,则使用像您在本地执行的自托管代理是这里的解决方案。托管计算机不会在证书存储中安装您的证书。 【参考方案1】:

如果您以与本地相同的方式运行签名,则使用与本地一样的自托管代理是此处的解决方案。托管计算机不会在证书存储中安装您的证书。

【讨论】:

以上是关于如果自签名清单,C# 无法在 Azure 管道中传递构建的主要内容,如果未能解决你的问题,请参考以下文章

如何将Azure管道变量传递给AzureResourceManagerTemplateDeployment @ 3任务使用的ARM模板?

Azure 管道:msbuild 不会在 _PublishedWebsites 中复制一个 DLL

如何在数据工厂管道中将路由传递给 Azure 函数(C#)http 触发器?

Azure 数据工厂:执行管道活动无法引用调用管道,需要循环行为

“创建管道时出错。”在 Azure 管道自托管代理中运行 powershell 脚本时

创建Azure自签名证书