2015-10-06 86 views
5

自使用Visual Studio 2015以來出現生成錯誤。在Visual Studio 2015中生成時,很少發生這種情況。在TeamCity中構建時,這經常發生。使用snk鍵簽名時生成錯誤

[錯誤在Visual Studio 2015年]

  • 從錯誤文件 'CompanyName.snk' 提取公鑰:該進程無法訪問文件「C:\ Users \用戶名\ AppData \本地的\ Temp \ tmp2FF6.tmp',因爲它正在被另一個進程使用。 CompanyName.Project.DAL d:\ Projecten \公司名稱\庫\源\組件\ CompanyName.Project.DAL \ VBC

http://i.stack.imgur.com/hKbbe.png

[在TeamCity的錯誤]

  • CSC錯誤CS7027:使用文件'CompanyName.snk'中的公鑰對輸出進行簽名時出錯 - 進程無法訪問文件'C:\ BuildAgents \ Gamma \ temp \ buildTmp \ tmpD91D.tmp',因爲它正在被另一個進程使用。

http://i.stack.imgur.com/rbgHx.png

+1

它看起來像多核構建的問題。您是否嘗試過使用MSBuild的單個實例(不帶/ m開關)構建解決方案?您是否嘗試診斷MSBuild的詳細輸出日誌?您是否嘗試確定哪個進程擁有臨時文件? – stukselbax

+0

我已經開始在上週的Jenkins構建服務器上看到這個問題!建築時我使用4芯(/ m:4)。它似乎隨機發生,每次都有不同的項目。我從來沒有在當地發生錯誤。僅從構建服務器。 – llykke

回答

4

嘗試清理所使用的生成的臨時文件夾。 當temp文件夾中有很多文件時,我看到了不同類型的問題。

一些工具使用GetTempFileName,他們會得到錯誤時臨時有大量文件

GetTempFileName方法將引發一個IOException如果使用不刪除之前的臨時文件,以創造超過65535個文件。

+0

代理的臨時文件夾中的文件數量是有限的。這是你所指的臨時文件夾嗎? –

+0

就是這樣。運行構建的用戶的臨時文件夾('C:\ Users \ USERNAME \ AppData \ Local \ Temp')有超過65535個文件。 –

0

當我將Resharper Cache移到系統溫度時,它啓動了我。當我將其移回解決方案文件夾時,問題消失了,我可以再次構建。

0

我剛剛有同樣的問題。在Visual Studio 2015年,我固定它使用以下步驟:

  1. 轉到工具>選項
  2. 在選項對話框中,選擇「項目和解決方案>生成和運行」
  3. 將「最大數量並行工程的構建」 1

+1到@stukselbax爲我安排在正確的軌道 Also got help from this link

3

上我知道這是一個得到控制而因爲有人問我這個問題,但是因爲我使用SO作爲我自己的參考,而且我也有這個問題,所以我想分享我的解決方案。

.snk文件用於簽署項目。您可能需要製作一個新的。

  • 右鍵單擊您的項目,選擇屬性。
  • 點擊簽名。
  • 單擊「簽署程序集」旁邊的複選框。
  • 在標有「選擇強名稱密鑰文件」的下拉列表中,單擊新建。
  • 填寫對話框,您希望特別注意密鑰文件名。當你按下ok時,這將生成一個新的.snk文件。
  • 保存項目並重建。
  • 這將在您的項目中使用新的.snk並解決 錯誤。

希望這有助於。

+0

會試一試,現在我只是刪除了項目簽名。也解決它作爲解決方法:-) –

1

這可能是帶有Roslyn編譯器的this issue的一個實例。解決方法是加入

<UseSharedCompilation>False</UseSharedCompilation> 

在.csproj文件中的任何<PropertyGroup>節點下。