2013-03-21 91 views
0

我們有一個silverlight(5)項目,TFS(2010)和Continuous Integration構建中的源代碼已經安裝並正常工作。但是,我們現在正處於我們試圖將其發佈給某些用戶的階段,以便他們使用它並提供反饋。我已經設置了代碼,以便檢查更新以及是否有下載最新的xap文件。但是,這需要對xap文件進行簽名。在我們的開發機器上這樣做時沒有問題,但是當涉及到自動化構建時,它會失敗,並且消息問題在TFS的後期構建事件中籤署xap文件構建

Xap包裝失敗。無法找到簽名工具SignTool.exe。

我試過很多事情讓signtool被識別,不能。然而,我們實際上並不需要CI構建,所以我嘗試了第二種方法來讓postbuild事件在VisualStudio中運行。在這裏跟隨了關於SO的各種建議,但不能讓他們工作。

後生成的事件是

if "$(BuildingInsideVisualStudio)" == "true" (
"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\signtool.exe" sign /f "$(SolutionDir)castle.pfx" "$(TargetDir)Castle.xap" 
copy "$(TargetDir)Castle.xap" "$(SolutionDir)Castle.Web\ClientBin" 
) 

仍然沒有喜悅。已嘗試過多種變體,但始終從自動構建中獲取相同的消息。

那麼任何人都可以幫助:a)讓簽名工具在構建服務器上被識別或者b)讓自動構建跳過構建後的事件?

+0

您能夠使用資源管理器導航到TF Build服務器上的SignTool.exe嗎? – TimVK 2013-03-21 13:46:33

+0

@TimVK是的 - 如果我在命令提示符下運行等價物,它工作正常 – SteveL 2013-03-21 14:02:58

+0

如果您使用標記腳本運行TFS構建,但沒有postbuild事件中的條件,您不能在日誌構建中看到「活動日誌「構建在哪裏尋找signtool? – TimVK 2013-03-21 14:09:11

回答

0

發現問題到底... 我一直在放置一些功能,以便應用程序下載並安裝最新的xap文件。這需要簽名。由於這不起作用,我遵循了有關簽署xap文件的一些說明,沒有意識到其中的其他開發人員已經在post build事件中放置了我在上面描述的代碼。 我錯誤地認爲這是由於我檢查'Sign The Xap File'複選框而產生的。

所以第一個問題是,其他開發人員沒有與我們分享他的pfx文件以添加到我們的證書商店。 其次,還有一個主要問題,就是我們有兩次嘗試簽字。一個通過複選框,另一個通過post build事件。我刪除了複選框,它工作正常。 複選框的問題是它期望SignTool.exe位於特定位置。在我們的開發包中,完全VS是它在尋找它的地方,但在構建服務器上卻不是。認爲它也可能與64位機器有關。 通過僅使用構建事件(一旦您安裝了正確的證書),您可以明確指定signtool的位置,並在必要時將Windows sdk安裝到該位置。

0

這是Google針對此錯誤的最佳結果,因此請使用我的步驟來解決此問題。

上述沒有爲我工作,但執行下面的步驟應該修復它。

  1. 安裝在構建服務器上的Windows 8.1 SDK(Windows 2008 R2上對我來說)
  2. 添加Windows SDK BIN目錄(包含signtool.exe,我的服務器上),環境PATH變量 - 例如c:\ program files(x86)\ Windows Kits \ 8.1 \ bin - 注意:不要在此處添加引號
  3. 重新啓動服務中的所有Visual Studio Team Foundation服務。msc將文件路徑添加到PATH變量,因爲它需要在構建之前重新加載這些文件