2012-09-11 43 views
4

我們正在C#中構建一個Outlook插件。它在VS中沒有問題,並且使用臨時pfx證書進行簽名。我們希望將構建過程放在Jenkins中並讓它自動運行。如何手動設置MSBuild標誌目標的密碼?

我們嘗試使用MSBuild運行VS解決方案。它在開發機器上的偉大工程,但在詹金斯有一個錯誤:

Cannot import the following key file: OutlookPlugin_TemporaryKey.pfx. The key file may be password protected. To correct this, try to import the certificate again or manually install the certificate to the Strong Name CSP with the following key container name: VS_KEY_A688DC31A30F3EF1

我們不知道如何指定自動生成的PFX密碼。或以其他方式自動執行簽名過程。

我們發現的一個解決方案是在VS中在同一臺機器上和與自動化過程相同的用戶中打開項目並輸入密碼。這不起作用,可能是因爲詹金斯每次都擦掉了工作區。 如果我們試圖在沒有簽名的情況下進行編譯,然後再簽名,它會抱怨ClickOnce程序集必須簽名。看來Office插件必須使用ClickOnce。

那麼,如何在構建文件的某處指定pfx密碼?

我們使用VS 2010與Office Tools。

回答

1

創建一個包含密碼作爲屬性的文件(本地或衆所周知的網絡共享),並從MSBuild腳本引用該文件。在文件上設置權限,以便只有構建帳戶可以讀取該文件。請注意,任何擁有管理員權限的構建計算機或知道構建帳戶密碼的人都可以讀取該密碼。最終,這裏沒有銀彈。如果MSBuild可以找到/解密/無論密碼如何,人類也可以。

如果您擔心私鑰的安全性,請考慮將簽名分離爲單獨的步驟並將私鑰存儲在智能卡上。這可能是矯枉過正,但它是最好的,常用的保護措施之一。

否則,只需將密碼作爲屬性添加即可。如您所知,項目文件只是MSBuild腳本。例如:

<PropertyGroup> 
    <PfxPassword>password</PfxPassword> 
</PropertyGroup> 

<!-- Sample sign task --> 
<SignTask> 
    <File>MyOutlookPlugin.dll</File> 
    <KeyFile>OutlookPlugin_TemporaryKey.pfx</KeyFile> 
    <Password>$(PfxPassword)</Password> 
</SignTask> 

有關的MSBuild屬性的詳細信息,請參閱http://msdn.microsoft.com/en-us/library/ms171458(v=vs.80).aspx

+0

主要關心的不是安全問題。我們只是不知道如何將密碼輸入到MSBuild腳本中。我們使用項目中的sln文件作爲MSBuild腳本。 – alexsimi

+0

@alexsimi添加了有關如何添加MSBuild屬性的信息。 – akton

+0

我們的csproj文件中沒有任何SignTask。當我們在控制檯中運行MSBuild時,我們可以看到正在執行的任務,但我們無法確定哪一個是符號任務,因此我們可以覆蓋它。可能是因爲這個項目是一個ClickOnce Outlook插件,與某個普通的c#項目不同。 – alexsimi

1

我們遇到了使用MSBuild和Bamboo構建項目的問題。我們修復的是從.csproj文件中刪除以下行。

<AssemblyOriginatorKeyFile>applicationcert.pfx</AssemblyOriginatorKeyFile> 
+0

是否會在構建過程或設置過程中移除這個實際的螺絲? –