2012-04-19 68 views
5

我有一個簽名類庫,我想通過sgen工具創建程序集。不過,我得到一個錯誤,當我嘗試運行以下命令:無法生成臨時類 - 簽署程序集時加密失敗

$ sgen.exe /a:testsign.dll /force /compiler:/keyfile:..\..\testsign.pfx /verbose /n
Error: Unable to generate a temporary class (result=1).
error CS1548: Cryptographic failure while signing assembly '[...path...]\TestSign.XmlSerializers.dll' -- 'Error signing assembly - - The parameter is incorrect. '

If you would like more help, please type "sgen /?".

我檢查其中指出

CS1548 occurs when assembly signing fails. This is usually due to an invalid key file name, an invalid key file path, or a corrupt key file.

不過,我剛剛創建的鍵上MSDN錯誤,路徑是正確的據我所知,Visual Studio 2010不會創建損壞的密鑰。

這個問題很容易重現。

  1. 使用代碼pasted here創建一個新的類庫。
  2. 創建兩個班,一個class TestSigning和一個class Model
  3. 去項目屬性>簽名,並檢查「登錄本次大會」
  4. 創建
  5. 打開Visual Studio命令提示符新的強名稱密鑰文件(2010年)
  6. 找到該DLL並運行sgen /a:<dllname> [... as above ...]

我的猜測是有東西的密鑰文件的公鑰。但我找不到任何來源,我怎麼通知sgen我用來保護密鑰文件的密碼。

我不知道如何着手。我在這裏看到的其他線程有相同的錯誤「標題」unable to generate temporary class但不同的錯誤細節,其中沒有Cryptographic failure(我發現)。

回答

3

按照this thread中的說明解決了此問題。雖然它不是用sgen工具手動完成的,但它是通過Visual Studio完成的。

也就是說,上面的例子改爲:

  1. 像以前
  2. 像以前那樣像以前那樣前
  3. 轉到Build標籤
  4. 設置生成序列化程序集
  5. 右鍵單擊該項目並選擇卸載項目
  6. 右鍵單擊該項目並選擇*編輯nnn.csproj **
  7. 粘貼下面的代碼段某處

    <PropertyGroup> 
        <SGenUseProxyTypes>false</SGenUseProxyTypes> 
        <SGenPlatformTarget>$(Platform)</SGenPlatformTarget> 
    </PropertyGroup> 
    
  8. 刷新和構建項目。

+0

不工作:)同樣的問題持續存在@default – 2015-03-03 13:31:04

+0

它3年前工作時,我張貼了這個答案。如果你有問題,我可以建議發佈一個新問題嗎? (如果你想要,你可以鏈接到這個問題,並解釋爲什麼它沒有幫助你,使它不作爲重複關閉) – Default 2015-03-03 13:47:44

1

最初我能夠在沒有任何打嗝的情況下構建項目。 當另一個簡單的項目不能被構建/發佈並拋出這個錯誤時,這太奇怪了。

在我運行Visual Studio後,我能夠構建這個作爲管理員

參考:Gordon's 3log

相關問題