Dot-Net

強名稱 sn.exe:無法安裝密鑰對 – 對像已存在

  • May 20, 2014

我的機器上有同一個項目的 2 個不同版本。一個來自程式碼主幹,另一個來自程式碼分支。這些項目使用 .pfx 密鑰來啟用強命名。當我第一次嘗試編譯項目的主幹版本時,我收到以下錯誤:

無法導入以下密鑰文件:sgKey.pfx。密鑰文件可能受密碼保護。要更正此問題,請嘗試再次導入證書或手動將證書安裝到具有以下密鑰容器名稱的強名稱 CSP:VS_KEY_45891C38BC1BB345

為了解決這個問題,我使用 sn.exe 和以下命令:

sn -i sg Key.pfx VS_KEY_45891C38BC1BB345

這解決了主幹項目的問題,然後愉快地建構。

但是,當我嘗試建構項目的分支版本時,我收到相同的初始錯誤(具有相同的密鑰容器名稱),並且當我嘗試使用 sn.exe 安裝證書時(不足為奇)給出以下錯誤:

安裝密鑰對失敗——對像已存在

這是有道理的,因為我在 sn 命令上使用了相同的infile容器,但我想了解的是:

  1. 如果此對像已經存在,為什麼項目無法建構,因為它似乎已經安裝了證書。
  2. 我如何解決這個問題(例如,我可以解除安裝然後重新安裝嗎?如果可以,如何解決?)

我已經設法解決了我的問題,但沒有完全了解原因。我在這裡找到了一篇關於類似問題的文章,但並不完全適合我的情況,因為我只以單個使用者身份登錄過我的機器。

該文章顯示瞭如何刪除容器,但我也不能這樣做,因為它說容器不存在。它所做的只是提示我以管理員身份執行命令提示符,這是我以前沒有做過的。這使我可以解除安裝並重新安裝證書,現在項目的兩個版本都已成功建構。

我的假設是,證書最初是在與我第二次嘗試安裝的使用者不同的使用者下(由我)安裝的,儘管我不知道為什麼會這樣,因為我只登錄過機器作為單個使用者。這對我來說仍然是個謎。


概括:

  1. 以管理員身份啟動開發人員命令提示符,否則您會收到一個誤導性錯誤,說容器不存在。
  2. 執行 sn -d VS_KEY_XXXXXXXXXXX 刪除舊密鑰。
  3. 您現在應該能夠重新安裝證書。

引用自:https://stackoverflow.com/questions/23754044