.NET框架程序设计--Globally Deployment Assembly全局部署程序集
Globally Deployment Assembly全局部署程序集
(一)StrongName Assembly
Strongly Named Assembly是CLR唯一標識程序集的機制,包含4個特性:
·文件名(沒有擴展名)
·版本號
·語言文化
·公有密鑰標記
例如:MyTypes,Version=1.0.123.0,Culture=neutral,PublicKeyToken=1234567890123456
利用?SN.exe 產生一個公鑰/私鑰對
SN -k mycompany.keys
查看公鑰
sn -p mycompany.keys mycompany.publickey
sn -tp mycompany.publickey
| Microsoft (R) .NET Framework 強名稱實用工具版本 1.1.4322.573 公鑰為 公鑰標記為 91e5e7845907a9e6 |
創建StrongName Assembly(using System.Relfection):
[assembly:AssemblyKeyFile("mycompany.keys")]
StrongName Assembly的元數據信息:
| Assembly AssemblyRef #1 |
(二)GAC(Global Assembly Cache)
c:\windows\Assembly\GAC
使用工具GACUtil.exe來實現安裝卸載:
安裝一個StrongNameAssembly:
gacutil.exe /i myassembly.dll
卸載一個StrongNameAssembly:
gacutil.exe /u myassembly.dll
在DOS窗口下查看細節:
(三)引用StrongNameAssembly
我們發現安裝DotNetFramwork的機器會有兩份程序集文件,一份是在C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\zh-CHS中,另一份則是在GAC中。
目的是方便應用程序的引用和加載.
引用是指我們在編譯程序的時候,如果需要引用別的程序集,則編譯器會按照這樣的目錄查找:
(1)使用編譯器的/reference指定的文件的完全路徑,如果只是程序集名稱,則繼續尋找
(2)當前工作目錄
(3)CLR所在目錄(C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\zh-CHS)
(4)使用編譯器的/lib指定的目錄
(5)LIB環境變量指定的目錄
加載是指應用程序運行的時候加載需要的程序集的路徑(加載順序在前面已經提到)
利用響應文件(.rsp)來設置編譯器的命令開關:
例如,創建一個myproject.rsp文件:
/out:myproject.exe
/target:winexe
編譯的時候使用這個文件
csc @myproject.rsp file1.cs file2.cs
那么就等于我們不用這個響應文件的命令行:
csc /out:myproject.exe /target:winexe file1.cs file2.cs
在C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322里面有個csc.rsp文件
| # This file contains command-line options that the C# # Reference the common Framework libraries |
(四)StrongNameAssembly的防篡改特性
在安裝StrongNameAssembly到GAC的時候,系統將會自動驗證程序集是否被篡改,在從GAC加載的時候又一次以不同的方式驗證,如果從別的非GAC目錄加載,也會對程序集進行嚴密驗證。
(五)延遲簽名
為了防止私有密鑰的泄漏,我們可以使用延遲簽名技術(Delayed Singning).
(1)取得公有密鑰的文件,并將下面兩個特性加入到源代碼:
[assembly:AssemlyKeyFile("MyCompanyPublicKey.keys")]
[assembly:AssemlyDelaySign(true)]
(2)生成Assembly的時候,執行下面的命令可以將Assembly安裝到GAC中(一次操作即可)
SN.exe -Vr MyAssembly.dll
(3)打包部署應用程序時,取得公有/私有密鑰對,執行命令:
SN.exe -R MyAssembly.dll MyCompanyKey.Keys
(4)執行下面的命令,恢復驗證過程進行測試:
SN.exe -Vu MyAssembly.dll
轉載于:https://www.cnblogs.com/caca/archive/2004/10/25/56346.html
總結
以上是生活随笔為你收集整理的.NET框架程序设计--Globally Deployment Assembly全局部署程序集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 发现不错的文章,推!
- 下一篇: 给 OpenPOP.Net 加一个小功能