使用密码保护的代码签名的Team Foundation Server Build失败

Sor*_*oot 19 tfs continuous-integration build code-signing delay-sign

我正在尝试在TFS 2008上设置持续集成构建.在我要构建的项目中,我使用密钥进行签名.此密钥使用密码.我无法构建它,因为在构建期间TFS想要显示一个无法显示的对话框.我想我需要在服务器上手动构建项目,但只有TFS资源管​​理器和构建部件安装在服务器上.有关如何使我的项目正确构建的任何建议?

这是TFS给出的错误:

C:\ WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(1805,7):错误MSB4018:"ResolveKeySource"任务意外失败.System.InvalidOperationException:当应用程序未在UserInteractive模式下运行时显示模式对话框或窗体不是有效操作.指定ServiceNotification或DefaultDesktopOnly样式以显示来自服务应用程序的通知.在Microsoft.Build.Tasks.ResolveKeySource.Execute()的Microsoft.Build.Tasks.ResolveKeySource.ResolveAssemblyKey()上的System.Windows.Form.ShowDialog(IWin32Window所有者)处的System.Windows.Forms.Form.ShowDialog()

Ray*_*sen 34

博客文章下面详细介绍了具体步骤

设置密钥文件

使用项目属性中的Visual Studio"签名"选项卡创建受密码保护的私钥/公钥对(KeyPair.pfx)从密钥对中提取公钥并将其复制到单独的文件(Key.snk)sn.exe -p KeyPair.pfx Key.snk

将KeyPair.pfx复制到您的构建服务器.我使用C:\ Program Files\MSBuild\KeyFile.pfx,因为它可以被$(MSBuildExtensionsPath)MSBuild属性访问.将KeyPair.pfx文件移动到安全可靠的位置.保密也是密码.将Key.snk复制到开发人员可以访问它的共享位置.设置签名项目

对于要签名的每个程序集:

  1. 打开项目属性| 签名页面
  2. 选择[X]签署组件复选框.
  3. 选择[X]仅限延迟符号复选框.
  4. 从密钥文件下拉列表中选择.
  5. 浏览到共享位置并选择Key.snk文件
  6. snk文件将复制到您为其分配的每个项目目录中
  7. 将密钥文件从您的一个项目复制到解决方案项目中,以便您可以将其用于测试运行配置

设置测试运行配置以重新签名

如果要检测程序集并为单元测试启用代码覆盖率,则需要指定用于重新签名的密钥文件.

打开LocalTestRun.testrunco​​nfig文件在"代码覆盖率"选项卡上,选择密钥作为"重新签名"密钥文件

禁用开发人员工作站上的强名称验证

由于您只使用公钥进行延迟签名,因此.NET CLR程序集验证将失败并在本地构建程序集.验证失败时,您将无法运行或调试程序集.

要在开发过程中克服这个问题,您需要对本地构建的程序集禁用强名称验证,并使用公钥进行延迟签名.

打开Visual Studio命令提示符类型: sn.exe -tp Key.snk

这将输出一些数据,包括令牌.

类型: sn -Vr *,YOUR_KEY_TOKEN

例: sn -Vr *,0123456789abcdef

这将禁用使用您的公钥签名的所有程序集的强名称验证.您可以使用以下命令列出强名称验证的当前设置:sn -Vl

为团队构建安装私钥

由于私钥(Key.pfx)受密码保护 - Team Build无法访问它.感谢Nagaraju Palla的博客:在Team Build中使用密码保护签名密钥,我们有一个解决方案.

以构建服务帐户登录Team Build服务器在Visual Studio中打开项目在Visual Studio中构建项目系统将提示您输入私钥文件的密码.输入密码关闭Visual Studio并注销私钥文件现在安装在构建服务帐户的本地证书存储中,Team Build可以访问它而无需再次提示输入密码.此证书存储与构建服务帐户的密码一样安全.(提示:使其与密钥文件的密码一样强大)

更新TFSBuild.proj构建脚本

Team Build可以访问私钥文件和密码.这允许它对组件进行完全签名.

要覆盖项目设置并指示Team Build使用私钥文件并禁用部分签名,我们需要在T​​FSBuild.proj中设置CustomPropertiesForBuild属性

签出您的TFSBuild.proj构建脚本搜索占位符属性(默认情况下接近第130行)将其替换为以下内容:SignAssembly = true; DelaySign = false; AssemblyOriginatorKeyFile = $(MSBuildExtensionsPath)\ Key.pfx签入您的更改排队构建验证团队构建输出

要检查Team Build是否正确地命名了程序集,可以使用sn.exe实用程序验证强名称签名.

打开Visual Studio命令提示符类型:sn.exe -vf assemblyname.dll

您还可以同时验证所有装配:

打开Visual Studio命令提示符类型:FOR%a IN(*.dll)DO sn.exe -vf%a

  • 如果您使用的是Visual Studio Online(微软托管TFS解决方案),该怎么办?您无法访问可以登录的构建计算机. (9认同)