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

时间:2010-10-26 15:38:01

标签: msbuild code-signing tfsbuild

我在Team Build 2010上使用MSBuildTFS)尝试构建项目时遇到此错误:


  

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中完成构建而不使用签名?我只是想检查它编译并运行单元测试。我不需要签名。

6 个答案:

答案 0 :(得分:9)

您需要根据具体情况调整this answer。类似的东西:

sn -i companyname.pfx VS_KEY_C00C673BBB353901

答案 1 :(得分:8)

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

答案 2 :(得分:5)

最终为我修复的是制作TFS Build服务在本地计算机上运行管理员的帐户。

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

我遇到过类似的问题

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

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

为避免此问题,我右键点击项目==>属性==>签名 然后取消选中"签署ClickOnce Manifests"

OR

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

OR

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

场景2:构建期间的清单错误

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

答案 5 :(得分:0)

我有以下设置:

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

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