在 MSBuild、Team Build 和 TFS 中使用 PFX 文件对程序集进行签名

Posted

技术标签:

【中文标题】在 MSBuild、Team Build 和 TFS 中使用 PFX 文件对程序集进行签名【英文标题】:Signing assemblies with PFX files in MSBuild, Team Build, and TFS 【发布时间】:2011-04-30 19:58:39 【问题描述】:

在TFS 2010 上尝试使用Team Build (MSBuild) 构建项目时出现此错误:


C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets (1970): 无法导入以下密钥文件:CCC.pfx。 密钥文件可能受密码保护。 要更正此问题,请尝试再次导入证书或手动将证书安装到具有以下密钥容器名称的强名称 CSP:VS_KEY_C00C673BBB353901

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets (1970): 已取消导入密钥文件“CCC.pfx”。


在 Visual Studio 2010 中一切正常。程序集使用PFX 文件进行签名。通常在 Visual Studio 中,我们在第一次构建时会提示输入密码,但之后再也不会...

我试过跑步:

sn -i companyname.pfx VS_KEY_3E185446540E7F7A 

作为 Stack Overflow 问题中建议的其他回复 Cannot import the keyfile 'blah.pfx' - error 'The keyfile may be password protected'。我已尝试按照 Stack Overflow 问题 Using MSBuild to sign ClickOnce or assembly results in error MSB3321 中的建议导入个人证书存储。但一切都无济于事,仍然是同样的错误。

我该怎么做?我是否必须以某种方式将证书添加到运行构建服务的 Windows 帐户或类似的东西?

或者,我如何在 Team Build 中完成构建而不使用签名?我只想检查它是否编译并运行单元测试。我不需要为此签名。

【问题讨论】:

【参考方案1】:

您需要根据您的具体情况调整this answer。比如:

sn -i companyname.pfx VS_KEY_C00C673BBB353901

【讨论】:

从我原来的帖子中可以看出,我已经尝试过了,但没有成功【参考方案2】:

我所做的并不那么优雅,但有效:以在构建机器上运行 msbuild 的用户身份登录,手动调用 msbuild,然后在出现提示时输入密码。它现在将保存在该用户的证书存储中,现在构建可以在无人值守的情况下运行。

【讨论】:

FWIW,大约 2 年后,仍然使用相同的构建服务器映像,从那以后甚至没有考虑过这一点。 您能描述一下您是如何运行 msbuild 的吗?我从 TFS 构建日志中获取了命令并删除了 /noconsolelogger 开关并在控制台中运行它。当我运行它时,我从未被提示输入密码,它只是失败并显示相同的错误消息。 @gregmac 我也有同样的问题。如何让 msbuild 提示输入密码?【参考方案3】:

最终为我解决的问题是让 TFS 构建服务在本地计算机上运行管理员的帐户。

不知道我之前尝试过的其他任何事情是否也需要完成才能使其正常工作。但是在成为管理员之前它不起作用,在它成为管理员之后它起作用了。

【讨论】:

感谢您自己的回答!也为我工作! 这也解决了我的 TeamCity 问题。我只是更改了构建代理服务的登录用户。我想知道如何安装这些证书,以便本地系统帐户可以使用它们..?【参考方案4】:

我遇到了同样的错误,在阅读了您的“管理员”评论后 - 我刚刚以管理员身份运行了 VS 命令提示符,现在它可以正常工作了。

【讨论】:

【参考方案5】:

我也遇到过类似的问题

场景一:在本地系统构建项目时

在我的情况下,一旦我从 TFS 下载项目并构建它,我就会收到清单签名错误。

为了避免这个问题,我右击了 project ==> Properties ==> Signing 然后取消选中“签署 ClickOnce 清单”

您可以点击从商店选择按钮,然后从打开的对话框中选择您的登录ID。

您可以手动安装 PFX 文件,然后单击更多选项按钮安装这些证书。

场景 2:- 在构建过程中显示错误

为了解决这个错误,我首先单击从商店选择按钮并从对话框中选择我的登录 ID。然后我首先在 TFS 中提交了该项目,然后运行构建。

【讨论】:

【参考方案6】:

我有以下设置:

<PropertyGroup>
  <SignAssembly>false</SignAssembly>
  <AssemblyOriginatorKeyFile>MyKey.pfx</AssemblyOriginatorKeyFile>
</PropertyGroup>

程序集签名已关闭,但 AssemblyOriginatorKeyFile 在清单签名期间导致错误。删除 AssemblyOriginatorKeyFile 进行修复。

【讨论】:

以上是关于在 MSBuild、Team Build 和 TFS 中使用 PFX 文件对程序集进行签名的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 msBuild 在 nuke-build 中发布解决方案

Team Foundation Server 突然无法连接(错误:TF400324)

UWP Jenkins + NuGet + MSBuild 手把手教你做自动UWP Build 和 App store包

如何为 msbuild 安装 nuget.build.tasks.pack.targets

TF259035:Team Foundation Server 将环境置于失败状态

msbuild ConfuserEx.Build 加密