2013-08-17 20 views
2

我使用包含公鑰和私鑰的「sn -k MyStrongkey.snk」創建了一個強大的密鑰。我已經使用「sn -p MyStrongKey.snk MyStrongPublicKey.snk」從中提取公鑰。我們可以將在應用程序範圍之外創建的任何公鑰分配給程序集嗎?

現在,當我將此提取的公鑰分配給classLibrary並運行該應用程序時,它將引發一個錯誤 - 強名稱驗證失敗。

是否無法創建應用程序範圍之外的程序集並將其指定給程序集?

感謝您的任何指導

回答

2

您不能用公鑰完全簽署程序集。這就是爲什麼你得到這個錯誤。

You have to sign your assembly with your key pairMyStrongKey.snk(包含私鑰)。

延遲註冊

部分地簽上您的組件(和你的公鑰)的唯一方法是通過Delay Signing。但爲了使用部分簽署的程序集,您必須配置您的機器以跳過簽名驗證

以下示例配置.NET框架跳過強名稱簽名驗證您的ClassLibrary組裝你的開發機:

sn -Vr ClassLibrary.dll 

您也可以使用sn.exe工具跳過簽名驗證所有組件用特定的密鑰簽名。例如,如果你想配置你的機器跳過所有組件延遲與在同一個按鍵您ClassLibrary簽字,你先做以下你的開發機:

sn -T ClassLibrary.dll 

這打印出公鑰的值令牌,公鑰的縮短版,看起來是這樣的:

Microsoft (R) .NET Framework Strong Name Utility Version 2.0.50727.42 
Copyright (c) Microsoft Corporation. All rights reserved. Public key 
token is b03f5f7f11d50a3a 

(需要注意的是公鑰標記的實際值將根據你的公鑰有所不同)。然後執行以下命令跳過使用該公鑰令牌的任何程序集的強名稱驗證:

sn -Vr *,b03f5f7f11d50a3a 

更多信息:http://msdn.microsoft.com/en-us/magazine/cc163583.aspx

公鑰和私鑰

公鑰的目標是給你的強名稱簽名的公開表示不會暴露你的整個簽名。

不知何故,您可以將公鑰視爲讀者密鑰,將私鑰視爲寫者密鑰。

Visual Studio提供了一種密碼保護密鑰對的方法,以避免未經授權的簽名和公鑰提取。但密碼存儲在您的電腦上。見Where is the strong name key password stored?

相關問題