我使用包含公鑰和私鑰的「sn -k MyStrongkey.snk」創建了一個強大的密鑰。我已經使用「sn -p MyStrongKey.snk MyStrongPublicKey.snk」從中提取公鑰。我們可以將在應用程序範圍之外創建的任何公鑰分配給程序集嗎?
現在,當我將此提取的公鑰分配給classLibrary並運行該應用程序時,它將引發一個錯誤 - 強名稱驗證失敗。
是否無法創建應用程序範圍之外的程序集並將其指定給程序集?
感謝您的任何指導
我使用包含公鑰和私鑰的「sn -k MyStrongkey.snk」創建了一個強大的密鑰。我已經使用「sn -p MyStrongKey.snk MyStrongPublicKey.snk」從中提取公鑰。我們可以將在應用程序範圍之外創建的任何公鑰分配給程序集嗎?
現在,當我將此提取的公鑰分配給classLibrary並運行該應用程序時,它將引發一個錯誤 - 強名稱驗證失敗。
是否無法創建應用程序範圍之外的程序集並將其指定給程序集?
感謝您的任何指導
您不能用公鑰完全簽署程序集。這就是爲什麼你得到這個錯誤。
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?