使用PFX文件在MSBuild、Team Build和TFS中签署程序集

20

当我尝试使用Team Build (MSBuild)在TFS 2010上构建项目时,出现以下错误:


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的问题中,其他回答建议如下:无法导入keyfile 'blah.pfx' - 错误'The keyfile may be password protected'。我已经尝试按照Stack Overflow的建议将其导入到个人证书存储中使用MSBuild签名ClickOnce或程序集会导致错误MSB3321。但是一切都没有用,仍然出现相同的错误。

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

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

6个回答

9

您需要将这个答案调整为适合您的特定情况。例如:

sn -i companyname.pfx VS_KEY_C00C673BBB353901

4
根据我的原始帖子,你可以看到我已经尝试过这个方法,但没有成功。 - MikeG

8
我所做的并不太优雅,但它能够正常工作:以在构建机上运行msbuild的用户身份登录,手动调用msbuild,然后在提示时输入密码。现在它将保存在该用户的证书存储中,然后构建就可以无人值守地运行了。

2
顺便说一句,两年后,我们仍在使用同一构建服务器镜像,甚至从未考虑过这个问题。 - gregmac
2
你能描述一下你是如何运行msbuild的吗?我从TFS构建日志中获取了命令,并删除了/noconsolelogger开关,然后在控制台中运行它。当我运行它时,从未提示输入密码,只是以相同的错误消息失败。 - Joel McBeth
@gregmac 我有同样的问题。你如何让msbuild提示输入密码? - jnm2

5
我最终解决问题的方法是将TFS Build服务运行所需的账户提升为本地管理员。不过我不确定之前尝试的其他方法是否也需要执行,以使其正常工作。但在账户成为管理员后,它就可以正常工作了。

1
这也解决了我在TeamCity中的问题。我只需更改构建代理服务的登录用户即可。我想知道如何安装这些证书,以便它们对本地系统帐户可用..? - Keith

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

0

我有以下设置:

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

程序集签名已关闭,但在清单签名过程中 AssemblyOriginatorKeyFile 引发错误。删除 AssemblyOriginatorKeyFile 即可修复。


0

我曾经遇到过类似的问题。

情况1:在本地系统中构建项目时

我的情况是,当我从TFS下载项目并构建时,我会遇到清单签名错误。

为了避免这个问题,我右键单击项目==>属性==>签名,然后取消选中“签署ClickOnce清单”。

或者

您可以单击从存储库中选择按钮,并从打开的对话框中选择您的登录ID。

或者

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

情况2:构建期间出现清单错误

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接