基本介紹
- 中文名:強名稱
- 外文名:strong name
- 基本標識:程式集的簡單文本名稱
- 自定義屬性:4個
- 領域:計算機
內容介紹,要求要點,生成方法,示例,
內容介紹
"Hello, version=1.0.0.0, culture=neutral, publicKeyToken=9ebd24cc40ff21fd"
其中publicKeyToken是公鑰的64位散列值,可以唯一標識程式集,擁有公鑰標記的程式集稱為強名稱程式集,強名稱程式集可以防篡改;可以安裝到GAC中,為多個程式集所共享;還可以實施版本策略(不同版本的強名稱程式集被認為是不同的程式集)。而公鑰標記為空的程式集只能存在於所引用的程式集的目錄以及子目錄中,也無法實施版本策略(引用它的程式集會忽略版本號)。
通過簽發具有強名稱的程式集,您可以確保名稱的全局唯一性。
要求要點
強名稱還特別滿足以下要求
*
*
強名稱保護程式集的版本沿襲。強名稱可以確保沒有人能夠生成您的程式集的後續版本。用戶可以確信,他們所載入的程式集的版本出自創建該版本(應用程式是用該版本生成的)的同一個發行者。
*
強名稱提供可靠的完整性檢查。通過 .NET Framework 安全檢查後,即可確信程式集的內容在生成後未被更改過。但請注意,強名稱中或強名稱本身並不暗含信任級別,例如由數字簽名和支持證書提供的信任。
在引用具有強名稱的程式集時,您應該能夠從中受益,例如版本控制和命名保護。如果此具有強名稱的程式集以後引用了具有簡單名稱的程式集(後者沒有這些好處),則您將失去使用具有強名稱的程式集所帶來的好處,並依舊會產生 DLL 衝突。因此,具有強名稱的程式集只能引用其他具有強名稱的程式集。
生成方法
公鑰可以通過.NET SDK提供的SN.exe命令生成,生成方法是:
SN.exe -k Zhang.snk
[assembly:AssemblyKeyFile(@"G:\Zhang.snk")]
示例
下面是一個Hello.cs檔案,是創建強名稱程式集的示例
using System;using System.Reflection;[assembly:AssemblyVersion("1.0.0.0")]
//程式集版本[assembly:AssemblyCultureAttribute("")]
// 區域(為空,表示語言中立)[assembly:AssemblyKeyFile(@"G:\zhang.snk")]
// 公私密鑰對
namespace Liu.Study {
public class Hello {
public Hello() {
Console.WriteLine("Class Hello Version 1.0");
}
public void SayHello() {
Console.WriteLine("Hello, C#!");
}
}
}
#Hello.rsp
/out:.\bin\Hello.dll
/target:library
Hello.cs
#end