我试图建立在TFS 2008的持续集成构建在我想建立我用于签名的一个关键项目。 这个密钥使用一个密码。 我不能让它建,因为构建TFS要显示其无法显示一个对话框中。 我想我需要用手在服务器上建立的项目,但只有TFS浏览器和建立零部件安装在服务器上。 如何让我的项目建设好有什么建议?
这是TFS给出的错误:
C:\ WINDOWS \ Microsoft.NET \框架\ v3.5版本\ Microsoft.Common.targets(1805,7):错误MSB4018:在 “ResolveKeySource” 任务意外失败。 System.InvalidOperationException:显示模式对话框或应用程序时,不UserInteractive模式下运行的形式是不是有效的操作。 请指定ServiceNotification或DefaultDesktopOnly样式,以显示服务应用程序的通知。 在System.Windows.Forms.Form.ShowDialog(IWin32Window所有者)在System.Windows.Forms.Form.ShowDialog()在Microsoft.Build.Tasks.ResolveKeySource.ResolveAssemblyKey()在Microsoft.Build.Tasks.ResolveKeySource.Execute()
该博客文章下面详细介绍了具体步骤
安装密钥文件
创建一个密码保护的私有/公共密钥使用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复制到你的开发人员可以访问的共享位置。 安装项目签署
对于要签名的每个组件:
- 打开项目属性| 签名页
- 选择[X]注册的组件复选框。
- 选择[X]延迟只签署复选框。
- 从密钥文件下拉列表中选择。
- 浏览到共享位置,然后选择Key.snk文件
- 在SNK文件将被复制到您将其分配给每个项目目录
- 从项目的一个关键文件复制到解决方案的项目,以便您可以使用它的测试运行配置
设置测试运行配置为续约
如果你想你的仪器组件和启用代码覆盖率的单元测试,那么你需要指定重新签名的密钥文件。
打开LocalTestRun.testrunconfig文件的代码覆盖率选项卡,选择键为重新签名的密钥文件
禁用强名称验证在开发者工作站
既然你是延迟签约只用公钥,.NET CLR装配验证将失败,当地建造组件。 如果验证失败,您将无法运行或调试组件。
要在发展中解决这个问题,你需要禁用强名称验证你本地构建和延时标志和你的公钥组件。
打开Visual Studio的命令提示符下键入: sn.exe -tp Key.snk
这将输出一些数据,包括令牌。
类型: sn -Vr *,YOUR_KEY_TOKEN
例如: sn -Vr *,0123456789abcdef
这将禁用强名称验证与您的公钥签署的所有组件。 可以列出为强名称验证与当前设置:SN -Vl
安装用于团队建设私钥
由于私钥(Key.pfx)是密码保护 - 团队建设不能访问它。 由于Nagaraju帕拉的博客:在团队建设使用密码保护的签名密钥 ,我们有一个解决方案。
登录到团队生成服务器生成服务帐户打开在Visual Studio构建在Visual Studio将提示您输入密码私钥文件中的项目的项目。 输入密码关闭Visual Studio中与注销私钥文件已经安装在生成服务帐户的本地证书存储和团队建设可以访问它而不会再次提示输入密码。 此证书存储区是生成服务帐户的密码安全。 (提示:请它就像作为你的密钥文件的密码强)
更新TFSBuild.proj生成脚本
团队建设已访问私人密钥文件和密码。 这使得它可以完全签署的组件。
要覆盖项目设置和指导团队建设使用私人密钥文件和关闭部分签名,我们需要设置在TFSBuild.proj的CustomPropertiesForBuild财产
退房的占位符属性(近默认线130)您的TFSBuild.proj生成脚本搜索与替换为以下:SignAssembly = TRUE; DelaySign = FALSE; AssemblyOriginatorKeyFile = $(MSBuildExtensionsPath)\ Key.pfx入住更改队列中的构建验证团队建设的输出
要检查团队建设已经正确地强命名程序集,可以使用sn.exe实用程序验证强名称签名。
打开Visual Studio的命令提示符下键入:SN.EXE室颤assemblyname.dll
您还可以验证在同一时间所有的组件:
打开Visual Studio的命令提示符下键入:FOR%一IN(* .DLL)DO SN.EXE室颤%一