強名稱

強名稱 (strong name) 由一個程式集的標識組成並通過公鑰數字簽名(針對該程式集生成)加強的名稱,其中的標識包括程式集的簡單文本名稱、版本號和區域性信息(如果提供的話)。

基本介紹

  • 中文名:強名稱
  • 外文名:strong name
  • 基本標識:程式集的簡單文本名稱
  • 自定義屬性:4個
  • 領域:計算機
內容介紹,要求要點,生成方法,示例,

內容介紹

由於程式集清單包含構成程式集實現的所有檔案的檔案散列,因此只對程式集中包含程式集清單的一個檔案生成數字簽名就足夠了。強名稱相同的程式集應該是相同的。
一個程式集通常包括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
這樣就得到一個名為Zhang.snk的公/私密鑰對檔案,將其放至某一目錄下,比如G:\,然後就可以創建強名稱程式集了,只需要在原始碼中添加下面的自定義屬性即可:
[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
最後編譯原始碼csc.exe Hello.rsp,就得到了一個強名稱程式集Hello.dll,使用Reflector.exe打開這個程式集,可以看到這樣的描述:name: Hello, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9ebd24cc40ff21fd。

相關詞條

熱門詞條

聯絡我們