2009-06-29 22 views
19

我正在嘗試在TFS 2008上建立持續集成構建。在我想構建的項目中,我使用密鑰進行簽名。該密鑰使用密碼。我無法構建它,因爲在構建期間,TFS想要顯示無法顯示的對話框。我想我需要在服務器上手動構建項目,但只有TFS瀏覽器和構建部件安裝在服務器上。關於如何讓我的項目正確構建的任何建議?使用密碼保護的代碼簽名的Team Foundation Server構建失敗

這是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()

回答

34

blog post下面詳細介紹了具體步驟

安裝密鑰文件

使用項目屬性中的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. 瀏覽到共享位置並選擇密鑰。SNK文件
  6. 的SNK文件將被複制到您從您的項目之一分配到
  7. 複製密鑰文件到解決方案項目的每個項目目錄,這樣就可以用它來測試運行配置

設置測試運行配置爲續約

如果你想你的儀器組件和啓用代碼覆蓋率的單元測試,那麼你需要指定重新簽名的密鑰文件。

打開LocalTestRun.testrunco​​nfig文件 在代碼覆蓋率選項卡,選擇鍵作爲開發者工作站重新簽名密鑰文件

禁用強名稱驗證

既然你是對延遲只有公共密鑰簽名,.NET CLR裝配驗證將失敗,當地建造組件。如果驗證失敗,您將無法運行或調試組件。

要發展克服這一點,你需要禁用強名稱驗證你本地構建和延時標誌和你的公鑰組件。

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

這將輸出一些數據,包括令牌。

類型: sn -Vr *,YOUR_KEY_TOKEN

例如:sn -Vr *,abcdef

這將禁用強名稱驗證與您的公鑰簽署的所有組件。 可以列出與強名稱驗證的當前設置: SN -Vl

安裝用於團隊私鑰生成

由於私鑰(Key.pfx)受密碼保護 - 團隊建設不能訪問它。由於Nagaraju Palla’s Blog: Using Password Protected Signing Keys in Team Build,我們有一個解決方案。

登錄到團隊生成服務器生成服務帳戶 打開在Visual Studio 建立在Visual Studio項目 系統將提示您輸入密碼私鑰文件的項目。 輸入密碼 關閉Visual Studio的&註銷 私鑰文件已經安裝在生成服務帳戶的本地證書存儲和團隊建設可以訪問它而不會再次提示輸入密碼。此證書存儲與構建服務帳戶的密碼一樣安全。 (提示:請它就像作爲你的密鑰文件的密碼強)

更新TFSBuild.proj生成腳本

團隊建設已訪問私人密鑰文件和密碼。這使它可以完全簽署組件。

要覆蓋的項目設置和指導團隊建設使用私人密鑰文件和關閉部分簽名,我們需要設置CustomPropertiesForBuild財產TFSBuild.proj

退房您的TFSBuild.proj生成腳本 搜索對於佔位符屬性(近默認線130) 與替換爲以下: SignAssembly = TRUE; DelaySign = FALSE; AssemblyOriginatorKeyFile = $(MSBuildExtensionsPath)\ Key.pfx 入住更改 隊列構建 驗證團隊建立輸出

要檢查Team Build是否已正確命名您的程序集,可以使用sn.exe實用程序來驗證強名稱簽名。

打開Visual Studio命令提示符 類型: SN.EXE室顫assemblyname.dll

您還可以驗證所有的組件在同一時間:

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

+0

很好的回答,謝謝!但是當我嘗試編譯項目以獲得安裝密鑰時遇到了一些麻煩。我沒有安裝「正常」的視覺工作室,只有tfs explorer和tfs構建。這是否意味着我必須安裝團隊開發人員才能構建我的項目? – Sorskoot 2009-06-29 08:30:20

相關問題