国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

學(xué)習(xí)筆記《.NET框架程序設(shè)計(jì)(修訂版)》--第三章 共享程序集 (2)

2024-07-10 12:59:15
字體:
供稿:網(wǎng)友
3.4 引用強(qiáng)命名程序集
1、第二章里提到用 csc.exe 的 /reference 命令行開關(guān)來指定期望引用的程序集文件名。如果文件名包含了完整路徑,則 csc.exe 加載指定路徑下的文件。如果指定的是不帶路徑的文件,它將在以下目錄中查找引用的程序集:
a、當(dāng)前工作路徑;
b、編譯器目前使用的clr所在的目錄。mscorlib.dll總是包含在該目錄中(system.object就定義在這個(gè)程序集中)。該目錄類似于:
c:/windows/micorsoft.net/framework/v1.0.3427 ;
c、任何用csc.exe的 /lib 命令行開關(guān)指定的目錄;
d、任何lib環(huán)境變量中指定的目錄。

安裝.net框架時(shí),微軟的程序集文件會(huì)被分別拷貝到 clr所在目錄及 gac目錄中。在clr所在目錄中拷貝是使我們能夠方便的生成自己的程序集;gac中的拷貝則是用于運(yùn)行時(shí)加載這些程序集。
csc.exe 不在gac 中查找所引用的程序集的原因是因?yàn)樾枰付ǖ穆窂奖容^麻煩。

2、響應(yīng)文件(response file):是一個(gè)包含一組編譯器命令行開關(guān)的文本文件。執(zhí)行csc.exe 命令時(shí),編譯器會(huì)打開響應(yīng)文件,并象使用通用命令行傳遞的開關(guān)一樣使用響應(yīng)文件中指定的命令行開關(guān)。
例子:
一個(gè)響應(yīng)文件myproject.rsp 包含下列文本:
/out:myproject.exe
/target:winexe
為了使csc.exe利用這些設(shè)置,可以象這樣調(diào)用:
csc.exe @myproject.rsp codefile1.cs codefile2.cs

c#編譯器支持多個(gè)響應(yīng)文件。
運(yùn)行csc.exe時(shí)它會(huì)自動(dòng)在當(dāng)前目錄中搜索一個(gè)本地的csc.rsp文件;另外編譯器還會(huì)在csc.exe所在的目錄中搜索一個(gè)全局的csc.rsp文件。
本地響應(yīng)文件和全局響應(yīng)文件中的設(shè)置有沖突時(shí),本地響應(yīng)文件中的設(shè)置將覆蓋全局響應(yīng)文件的設(shè)置;類似的,顯示傳遞給csc.exe的設(shè)置也將覆蓋本地響應(yīng)文件中的設(shè)置。
csc.rsp包含類似以下的命令行:
/r:systme.dll
/r:accessibility.dll
/r:system.data.dll
等等;
需要的話我們也可以向csc.rsp文件中添加自己的命令行開關(guān)。

3.5 強(qiáng)命名程序集的防篡改特性
1、用私有密鑰為程序集簽名可以確保該程序集的生產(chǎn)者為對應(yīng)公有密鑰的持有者:
a、當(dāng)程序集被安裝到gac目錄內(nèi)時(shí),系統(tǒng)將會(huì)對包含清單的文件內(nèi)容進(jìn)行散列轉(zhuǎn)換,并用得到的散列值來和嵌入在pe文件中的rsa數(shù)字簽名進(jìn)行比較。如果相同證明程序集文件的內(nèi)容沒有被篡改,并且可以知道我們擁有著和發(fā)布者的私有密鑰相對應(yīng)的公有密鑰;
b、系統(tǒng)會(huì)對程序集中其他文件的內(nèi)容進(jìn)行散列轉(zhuǎn)換,然后將得到的散列值和清單文件中filedef表內(nèi)存儲(chǔ)的散列值進(jìn)行比較。如果發(fā)現(xiàn)有任何不匹配的情況,則證明至少有一個(gè)程序集的文件被篡改了。

2、當(dāng)應(yīng)用程序需要綁定一個(gè)程序集時(shí),clr將使用所引用的程序集的一些屬性(名稱、版本、語言文化及公有密鑰)來在gac中定位程序集。
如果找到被引用的程序集,它所在的子目錄被返回,保存清單的那個(gè)文件將被加載。這樣確保了運(yùn)行時(shí)加載的程序集和編譯時(shí)生成的程序集總時(shí)來自同一個(gè)發(fā)布者。
如果被引用的程序集不在gac中:
b、clr將在應(yīng)用程序的基目錄中查找,如果還沒找到則
c、clr將到應(yīng)用程序的配置文件中標(biāo)識的私有路徑中查找
d、如果應(yīng)用程序時(shí)使用msi來安裝的,clr會(huì)要求msi來定位程序集。
如果找不到程序集綁定失敗系統(tǒng)拋出一個(gè) system.io.filefoundexception 異常。

當(dāng)強(qiáng)命名程序集文件是從一個(gè)非gac的地方加載時(shí)clr會(huì)在程序集被加載的時(shí)候比較散列值(若是gac中加載,則在程序安裝時(shí)比較散列值?)。如果檢測到散列值不匹配拋出 system.io.fileloadexception 異常。



菜鳥學(xué)堂:
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 沐川县| 丁青县| 丽水市| 高安市| 临夏县| 璧山县| 崇义县| 鄂尔多斯市| 大连市| 东至县| 鲁山县| 津南区| 青川县| 白河县| 清涧县| 柯坪县| 津市市| 牡丹江市| 肥东县| 册亨县| 井陉县| 阳江市| 米脂县| 顺义区| 徐州市| 蒲江县| 正镶白旗| 玉龙| 沧源| 台南市| 英超| 斗六市| 江达县| 沾化县| 乃东县| 江华| 阿拉善右旗| 宁夏| 商河县| 德阳市| 遂溪县|