下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、程序集和全局程序集緩存(c#編程指南)程序集是任何.net framework應(yīng)用程序的基本構(gòu)造塊。例如,在生成簡單的c#應(yīng)用程序 吋,visual studio創(chuàng)建一個(gè)單個(gè)可移植可執(zhí)行(pe)文件形式的程序集,明確地說就是一 個(gè)exe或dll。程序集包含描述它們自己的內(nèi)部版本號(hào)和它們包含的所有數(shù)據(jù)和對(duì)象類型 的詳細(xì)信息的元數(shù)據(jù)。程序集僅在需要時(shí)才加載。如果不使用程序集,則不會(huì)加載。這意味 著程序集可能是在大型項(xiàng)目屮管理資源的有效途徑。程序集可以包含一個(gè)或多個(gè)模塊。例如,計(jì)劃較大的項(xiàng)目時(shí),可以讓兒個(gè)各個(gè)開發(fā)人員負(fù)責(zé) 單獨(dú)的模塊,并通過組合所有這些模塊來創(chuàng)建單個(gè)程序集。程序集概述程序集具有以下特
2、點(diǎn):程序集作為.exe或.dll文件實(shí)現(xiàn)。通過將程序集放在全局程序集緩存中,可在多個(gè)應(yīng)用程序之i'可共亨程序集。要將程序集放在全局程序集緩存中,必須對(duì)程序集進(jìn)行強(qiáng)命名。程序集僅在需要時(shí)才加載到內(nèi)存中??梢允褂梅瓷鋪硪跃幊谭绞将@取關(guān)于程序集的信息。 如果加載程序集的目的只是對(duì)其進(jìn)行檢查,應(yīng)使用諸如reflectiononlyloadfrom 的方法??梢栽趩蝹€(gè)應(yīng)用程序中使用相同程序集的兩個(gè)版本。創(chuàng)建多文件程序集用于c#和visual basic的visual studio 2005 ide只能用于創(chuàng)建單文件程序集。如果 要?jiǎng)?chuàng)建多文件程序集,必須使用命令行編譯器或帶有visual c卄 的
3、visual studio 2005o 下面的示例通過編譯包含其他文件所引用的命名空間的文件,來闡釋上述過程的步驟1。此 示例開始時(shí)是stringer文件的一些簡單代碼,stringer具有名為mystringer的命名空 間(帶有名為stringer的類)。stringer類包含名為stringermethod的方法,此方法 將單獨(dú)一行寫入控制臺(tái)。c#復(fù)制代碼/ assembly building example in the . net framework.using system;namespacc mystringerpublic class stringerpublic void s
4、tringermethod()system. console. writelinec'this is a line from stringetmethod.");使用下面的命令編譯此代碼:c#復(fù)制代碼esc /1:module stringer. cs使用/t:編譯器選項(xiàng)指定module參數(shù),表明文件應(yīng)作為模塊(而不是作為程序集)編譯。 編譯器生成名為stringer, netmodule的模塊,該模塊可添加到程序集。在上述過程的笫二步中,必須編譯包含對(duì)其他模塊的引用的模塊。此步驟使用/addmodule 編譯器選項(xiàng)。在下面的示例中,名為client的代碼模塊具有入口點(diǎn)mai
5、n方法,此方法引 用步驟1中創(chuàng)建的stringer, dll模塊中的方法。下面的示例說明了 client的代碼。c#復(fù)制代碼using system;using mystringer; /the namespace created in stringer. netmodule.class mainclientapp/ static method main is the entry point method.public static void main()stringer mystringinstancc = new stringer();con sole. writeline (,zc1 i
6、e nt code executes");/mystringcomp. stri nger();mystringlnstanee. stringermethod();使用下面的命令編譯此代碼:c#復(fù)制代碼esc /addmodule:stringer, netmodule /t:module client, cs指圧/t:module選項(xiàng),因?yàn)榇四K將在以后的步驟中添加到程序集。指定/addmodule選 項(xiàng),因?yàn)閏lient中的代碼引用stringer, netmodule中的代碼創(chuàng)建的命名空i'可。編譯器生 成名為cl ient. netmodule的模塊,它包含對(duì)另一模
7、塊stringer, netmodule的引用。兩次編譯創(chuàng)建出一個(gè)雙文件程序集:esc /t:module stringer, csesc client.es /addmodule:stringer. netmodule 一次編譯創(chuàng)建出一個(gè)雙文件程序集:esc /out:client. exe client. cs /out:smodule stringer.cs此示例測試一個(gè)dll以確定它是否為程序集。c#心復(fù)制代碼class testassemblystatic void main()trysystem. reflection. assemblyname testassembly -sys
8、tem. ref lection. assemblyxame. getassemblyxame c: windows systemavicap. dll" );system. console. writeline("yes, the file is an assembly.z/);catch (system. to. fi1enotfoundexception e)system. console. writeline (z/the file can not be found.z/);catch (system. badtmageformatexception e)syste
9、m. console. writeline (z/the file is not an assembly. z,);catch (system. to. fileloadexception e)system. console. writeline("the assembly has already been loaded.,z);getassemblyname方法加載測試文件,然后在讀取信息之后釋放它。 輸出the file is not an assembly.請(qǐng)考慮下而的文件,它創(chuàng)建一個(gè)包含一個(gè)命名空間和兩個(gè)類的程序集。假設(shè)此程序集已經(jīng)生 成,并以helloworldremote
10、. exe為名存儲(chǔ)在驅(qū)動(dòng)器c上。c#召復(fù)制代碼/ this namespace contains code to be cal space hellowor1dremotepublic class remoteobject : system. marshalbyrefobjectpublic remoteobject()system. console. writeline("hello, world! (remoteobjectconstructor)“);class programstatic void main()system. console. writelin
11、e (z,hello, worl d! (main method)z,);|為了從其他應(yīng)用程序訪問該代碼,可以將該程序集加載到當(dāng)前應(yīng)用程序域中,或創(chuàng)建新的應(yīng) 用程序域并將該程序集加載到其川。如杲使用assembly. loadfrom將程序集加載到當(dāng)前應(yīng) 用程序域中,您可以使用assembly. createlnstance來實(shí)例化remoteobject類的實(shí)例, 這樣將導(dǎo)致執(zhí)行對(duì)象構(gòu)造函數(shù)。c#卻復(fù)制代碼static void maino/ load the assembly into the current appdomain:system. reflection. assembly n
12、ewassembly =systcm. ref lection. assembly. loadfrom(,zc:hc11 oworidremote. exe");/ instantiate remoteobject:new a ssembly. create in sta nceclielloworldremote. rem ot eobject");|將程序集加載到一個(gè)單獨(dú)的應(yīng)用程序域時(shí),應(yīng)使用appdomain. executeassembly來訪問默 認(rèn)入口點(diǎn),或使用appdomain. createlnstance創(chuàng)建remoteobject類的實(shí)例。創(chuàng)建該實(shí) 例將
13、導(dǎo)致執(zhí)行構(gòu)造函數(shù)。c#也復(fù)制代碼static void mainosystem. appdomain newappdomain =system. appdomain. createdomai n("newappli cationdomai n");/ load the assembly and call the default entry point:newappdomain. executeasscmb 1 y (,zc:he 11owor 1 dremote. exez,);/ create an instance of remoteobject:newappdomai
14、n. createtnstancefrom("c:iiel1oworldremote.exe",z,hel 1 oworl dremote. remoteobject");i如果不想以編程方式加載程序集,可以從“解決方案資源管理器”中使用“添加引用”來指 定程序集helloworldremote.exe。然后向應(yīng)用程序的using塊中添加一個(gè)using holloworldrcmote;指令,并在程序中使用remoteobject類型來聲明remoteobject對(duì) 彖的一個(gè)實(shí)例,如下所示:c#總復(fù)制代碼static void maino/ this code c
15、reates an instancc of remoteobject, assumi ng helloworldremote has been added as a reference:hel1owor1dremote. remoteobject o 二 new helloworldremote. remoteobject();i應(yīng)當(dāng)僅在需要吋才將程序集安裝到全局程序集緩存中以進(jìn)行共亨。一般原則是:程序集依賴 項(xiàng)保持專用,并在應(yīng)用程序目錄中定位程序集,除非明確要求共享程序集。另外,不必為了 使com interop或非托管代碼可以訪問程序集而將程序集安裝到全局程序集緩存。 有若干方法可以將程序集部署到全局程序集緩存中: 使用專用于全局程序集緩存的安裝程序。該方法是將程序集
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國西部經(jīng)濟(jì)技術(shù)開發(fā)合作合同
- 家居用品購銷合同
- 城市智慧交通項(xiàng)目合作合同
- 2024年電子商務(wù)平臺(tái)開發(fā)合作合同
- 能源設(shè)備采購安裝合同
- 企業(yè)質(zhì)量管理體系建設(shè)合作合同
- 網(wǎng)絡(luò)安全產(chǎn)品與服務(wù)供應(yīng)合同
- 解除勞動(dòng)合同補(bǔ)償協(xié)議
- 醫(yī)院藥品采購合同協(xié)議
- 普通個(gè)人借款合同
- 2024屆武漢市部分學(xué)校中考一模數(shù)學(xué)試題含解析
- SYT 0447-2014《 埋地鋼制管道環(huán)氧煤瀝青防腐層技術(shù)標(biāo)準(zhǔn)》
- 第19章 一次函數(shù) 單元整體教學(xué)設(shè)計(jì) 【 學(xué)情分析指導(dǎo) 】 人教版八年級(jí)數(shù)學(xué)下冊(cè)
- SWITCH塞爾達(dá)傳說曠野之息-1.6金手指127項(xiàng)修改使用說明教程
- 浙教版七年級(jí)下冊(cè)科學(xué)全冊(cè)課件
- 弧度制及弧度制與角度制的換算
- GB/T 33322-2016橡膠增塑劑芳香基礦物油
- 瓦楞紙箱計(jì)算公式測量方法
- 江蘇省中等職業(yè)學(xué)校學(xué)業(yè)水平考試商務(wù)營銷類(營銷方向)技能考試測試題
- DB32-T 4004-2021水質(zhì) 17種全氟化合物的測定 高效液相色譜串聯(lián)質(zhì)譜法-(高清現(xiàn)行)
- DB15T 2724-2022 羊糞污收集處理技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論