• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎(chǔ)} {C++ 高級(jí)} {C#界面,C++核心算法} {設(shè)計(jì)模式} {C#基礎(chǔ)}

            程序集

            程序集是 .NET Framework 應(yīng)用程序的構(gòu)造塊;程序集構(gòu)成了部署、版本控制、重復(fù)使用、激活范圍控制和安全權(quán)限的基本單元。程序集是為協(xié)同工作而生成的類(lèi)型和資源的集合,這些類(lèi)型和資源構(gòu)成了一個(gè)邏輯功能單元。程序集為公共語(yǔ)言運(yùn)行庫(kù)提供它識(shí)別類(lèi)型實(shí)現(xiàn)所需的信息。對(duì)于運(yùn)行庫(kù),類(lèi)型不存在于程序集上下文之外。


            程序集是 .NET Framework 編程的基本組成部分。程序集執(zhí)行以下功能:

            • 包含公共語(yǔ)言運(yùn)行庫(kù)執(zhí)行的代碼。如果可移植可執(zhí)行 (PE) 文件沒(méi)有相關(guān)聯(lián)的程序集清單,則將不執(zhí)行該文件中的 Microsoft 中間語(yǔ)言 (MSIL) 代碼。請(qǐng)注意,每個(gè)程序集只能有一個(gè)入口點(diǎn)(即 DllMainWinMainMain)。
            • 程序集形成安全邊界。程序集就是在其中請(qǐng)求和授予權(quán)限的單元。有關(guān)應(yīng)用于程序集的安全邊界的更多信息,請(qǐng)參見(jiàn)程序集安全注意事項(xiàng)
            • 程序集形成類(lèi)型邊界。每一類(lèi)型的標(biāo)識(shí)均包括該類(lèi)型所駐留的程序集的名稱(chēng)。在一個(gè)程序集范圍內(nèi)加載的 MyType 類(lèi)型不同于在其他程序集范圍內(nèi)加載的 MyType 類(lèi)型。
            • 程序集形成引用范圍邊界。程序集的清單包含用于解析類(lèi)型和滿(mǎn)足資源請(qǐng)求的程序集元數(shù)據(jù)。它指定在該程序集之外公開(kāi)的類(lèi)型和資源。該清單還枚舉它所依賴(lài)的其他程序集。
            • 程序集形成版本邊界。程序集是公共語(yǔ)言運(yùn)行庫(kù)中最小的可版本化單元,同一程序集中的所有類(lèi)型和資源均會(huì)被版本化為一個(gè)單元。程序集的清單描述您為任何依賴(lài)項(xiàng)程序集所指定的版本依賴(lài)性。有關(guān)版本控制的更多信息,請(qǐng)參見(jiàn)程序集版本控制
            • 程序集形成部署單元。當(dāng)一個(gè)應(yīng)用程序啟動(dòng)時(shí),只有該應(yīng)用程序最初調(diào)用的程序集必須存在。其他程序集(例如本地化資源和包含實(shí)用工具類(lèi)的程序集)可以按需檢索。這就使應(yīng)用程序在第一次下載時(shí)保持精簡(jiǎn)。有關(guān)部署程序集的更多信息,請(qǐng)參見(jiàn)部署應(yīng)用程序
            • 程序集是支持并行執(zhí)行的單元。有關(guān)運(yùn)行多個(gè)程序集版本的更多信息,請(qǐng)參見(jiàn)程序集和并行 (side-by-side) 執(zhí)行

            程序集可以是靜態(tài)的或動(dòng)態(tài)的。靜態(tài)程序集可以包括 .NET Framework 類(lèi)型(接口和類(lèi)),以及該程序集的資源(位圖、JPEG 文件、資源文件等)。靜態(tài)程序集存儲(chǔ)在磁盤(pán)上的可移植可執(zhí)行 (PE) 文件中。您還可以使用 .NET Framework 來(lái)創(chuàng)建動(dòng)態(tài)程序集,動(dòng)態(tài)程序集直接從內(nèi)存運(yùn)行并且在執(zhí)行前不存儲(chǔ)到磁盤(pán)上。您可以在執(zhí)行動(dòng)態(tài)程序集后將它們保存在磁盤(pán)上。

            有幾種創(chuàng)建程序集的方法。您可以使用過(guò)去用來(lái)創(chuàng)建 .dll 或 .exe 文件的開(kāi)發(fā)工具,例如 Visual Studio .NET。您可以使用在 .NET Framework SDK 中提供的工具來(lái)創(chuàng)建帶有在其他開(kāi)發(fā)環(huán)境中創(chuàng)建的模塊的程序集。您還可以使用公共語(yǔ)言運(yùn)行庫(kù) API(例如 Reflection.Emit)來(lái)創(chuàng)建動(dòng)態(tài)程序集。
            NET Framework 開(kāi)發(fā)員指南  

            程序集的優(yōu)點(diǎn)

            程序集旨在簡(jiǎn)化應(yīng)用程序部署并解決在基于組件的應(yīng)用程序中可能出現(xiàn)的版本控制問(wèn)題。

            最終用戶(hù)和開(kāi)發(fā)人員比較熟悉當(dāng)今基于組件的系統(tǒng)所產(chǎn)生的版本控制和部署問(wèn)題。一些最終用戶(hù)曾經(jīng)歷過(guò)在計(jì)算機(jī)上安裝新應(yīng)用程序失敗的事情,發(fā)現(xiàn)已有應(yīng)用程序突然停止工作。許多開(kāi)發(fā)人員花費(fèi)了大量的時(shí)間來(lái)使所有必需的注冊(cè)表項(xiàng)保持一致,以便激活 COM 類(lèi)。

            通過(guò)在 .NET Framework 中使用程序集,許多開(kāi)發(fā)問(wèn)題得以解決。因?yàn)槌绦蚣遣灰蕾?lài)于注冊(cè)表項(xiàng)的自述組件,所以程序集使無(wú)相互影響的應(yīng)用程序安裝成為可能。程序集還使應(yīng)用程序的卸載和復(fù)制得以簡(jiǎn)化。

            版本控制問(wèn)題

            目前,Win32 應(yīng)用程序存在兩類(lèi)版本控制問(wèn)題:

            • 版本控制規(guī)則不能在應(yīng)用程序的各段之間表達(dá),并且不能由操作系統(tǒng)強(qiáng)制實(shí)施。目前的辦法依賴(lài)于向后兼容,而這通常很難保證。接口定義一經(jīng)發(fā)布就必須是靜態(tài)的,并且單段代碼必須保持與以前版本向后兼容。此外,通常要對(duì)代碼進(jìn)行設(shè)計(jì),以便在任意給定時(shí)間在計(jì)算機(jī)上只能出現(xiàn)和執(zhí)行代碼的一個(gè)版本。
            • 沒(méi)有辦法在創(chuàng)建到一起的多套組件集與運(yùn)行時(shí)提供的那套組件之間保持一致。

            這兩類(lèi)版本控制問(wèn)題結(jié)合在一起產(chǎn)生了 DLL 沖突,在這些沖突中,安裝一個(gè)應(yīng)用程序可能會(huì)無(wú)意間破壞現(xiàn)有的應(yīng)用程序,因?yàn)樗惭b的某個(gè)軟件組件或 DLL 與以前的版本不完全向后兼容。出現(xiàn)此情況后,系統(tǒng)不支持診斷和解決此問(wèn)題。

            最終解決 DLL 沖突

            Microsoft? Windows? 2000 開(kāi)始致力于解決這些問(wèn)題。它所提供的兩個(gè)功能可以部分地解決 DLL 沖突:

            • Windows 2000 使您能夠創(chuàng)建這樣的客戶(hù)端應(yīng)用程序,其中的 .dll 依賴(lài)文件與該應(yīng)用程序的 .exe 文件位于相同的目錄中。Windows 2000 經(jīng)過(guò)配置,能夠在檢查完全限定的路徑或搜索常規(guī)路徑前,檢查 .exe 文件所在目錄中的組件。這使組件可以獨(dú)立于其他應(yīng)用程序所安裝和使用的組件。
            • Windows 2000 鎖定 System32 目錄中隨操作系統(tǒng)提供的文件,使這些文件不會(huì)在安裝應(yīng)用程序時(shí)被無(wú)意替換。

            公共語(yǔ)言運(yùn)行庫(kù)使用程序集來(lái)繼續(xù)致力于 DLL 沖突的徹底解決。

            程序集解決方案

            為了解決版本控制問(wèn)題以及導(dǎo)致 DLL 沖突的其余問(wèn)題,運(yùn)行庫(kù)使用程序集來(lái)執(zhí)行以下功能:

            • 使開(kāi)發(fā)人員能夠指定不同軟件組件之間的版本規(guī)則。
            • 提供強(qiáng)制實(shí)施版本控制規(guī)則的結(jié)構(gòu)。
            • 提供允許同時(shí)運(yùn)行多個(gè)版本的軟件組件(稱(chēng)作并行執(zhí)行)的基本結(jié)構(gòu)。

            程序集內(nèi)容

            通常,靜態(tài)程序集可能由以下四個(gè)元素組成:

            • 程序集清單,包含程序集元數(shù)據(jù)。
            • 類(lèi)型元數(shù)據(jù)。
            • 實(shí)現(xiàn)這些類(lèi)型的 Microsoft 中間語(yǔ)言 (MSIL) 代碼。
            • 資源集。

            只有程序集清單是必需的,但也需要類(lèi)型或資源來(lái)向程序集提供任何有意義的功能。

            程序集中的這些元素有分組幾種方法。您可以將所有元素分組到單個(gè)物理文件中,如下圖所示。

            單文件程序集

            或者,可以將一個(gè)程序集的元素包含在幾個(gè)文件中。這些文件可能是編譯代碼的模塊 (.netmodule)、資源(例如 .bmp 或 .jpg 文件)或應(yīng)用程序所需的其他文件。在您希望組合以不同語(yǔ)言編寫(xiě)的模塊并優(yōu)化應(yīng)用程序的下載過(guò)程時(shí),可創(chuàng)建一個(gè)多文件程序集,優(yōu)化下載過(guò)程的方法是將很少使用的類(lèi)型放入只在需要時(shí)才下載的模塊中。

            在下圖中,一個(gè)假想應(yīng)用程序的開(kāi)發(fā)人員已選擇將一些實(shí)用工具代碼單獨(dú)放入另一個(gè)模塊中,同時(shí)在其原文件中保留一個(gè)較大的資源文件(在此例中為一個(gè) .bmp 圖像)。.NET Framework 只在文件被引用時(shí)下載該文件;通過(guò)將很少引用的代碼保留在獨(dú)立于應(yīng)用程序的文件中來(lái)優(yōu)化代碼下載。

            多文件程序集

            注意   構(gòu)成多文件程序集的那些文件實(shí)際上并非由文件系統(tǒng)來(lái)鏈接。它們而是通過(guò)程序集清單進(jìn)行鏈接,公共語(yǔ)言運(yùn)行庫(kù)將這些文件作為一個(gè)單元來(lái)管理。

            在此插圖中,所有三個(gè)文件均屬于一個(gè)程序集,如 MyAssembly.dll 所包含的程序集清單文件中所述。對(duì)于該文件系統(tǒng),這三個(gè)文件是三個(gè)獨(dú)立的文件。請(qǐng)注意,文件 Util.netmodule 被編譯為一個(gè)模塊,因?yàn)樗话魏纬绦蚣畔ⅰT趧?chuàng)建了程序集后,該程序集清單就被添加到 MyAssembly.dll,指示程序集與 Util.net 模塊和 Graphic.bmp 的關(guān)系。

            現(xiàn)在設(shè)計(jì)源代碼時(shí),您會(huì)作出有關(guān)如何將應(yīng)用程序的功能劃分到一個(gè)或多個(gè)文件的明確的決定。在設(shè)計(jì) .NET Framework 代碼時(shí),您也將作出類(lèi)似的決定,即如何將應(yīng)用程序的功能劃分到一個(gè)或多個(gè)程序集中。

            全局程序集緩存

            安裝有公共語(yǔ)言運(yùn)行庫(kù)的每臺(tái)計(jì)算機(jī)都具有稱(chēng)為全局程序集緩存的計(jì)算機(jī)范圍內(nèi)的代碼緩存。全局程序集緩存中存儲(chǔ)了專(zhuān)門(mén)指定給由計(jì)算機(jī)中若干應(yīng)用程序共享的程序集。

            應(yīng)當(dāng)僅在需要時(shí)才將程序集安裝到全局程序集緩存中以進(jìn)行共享。一般原則是:程序集依賴(lài)項(xiàng)保持專(zhuān)用,并在應(yīng)用程序目錄中定位程序集,除非明確要求共享程序集。另外,不必為了使 COM interop 或非托管代碼可以訪(fǎng)問(wèn)程序集而將程序集安裝到全局程序集緩存。

            注意   在有些情況下,您顯然不希望將程序集安裝到全局程序集緩存中。如果您將組成應(yīng)用程序的某個(gè)程序集置于全局程序集緩存中,則將不再能夠通過(guò)使用 xcopy 命令復(fù)制應(yīng)用程序目錄來(lái)復(fù)制或安裝該應(yīng)用程序。您還必須在全局程序集緩存中移動(dòng)該程序集。

            有若干方法可以將程序集部署到全局程序集緩存中:

            • 使用專(zhuān)用于全局程序集緩存的安裝程序。該方法是將程序集安裝到全局程序集緩存的首選方法。
            • 使用 .NET Framework SDK 所提供的名為全局程序集緩存工具 (Gacutil.exe) 的開(kāi)發(fā)人員工具。
            • 使用 Windows 資源管理器將程序集拖到緩存中。
              注意   在部署方案中,應(yīng)該使用 Windows 安裝程序 2.0 將程序集安裝到全局程序集緩存中。我們一般只在開(kāi)發(fā)方案中使用 Windows 資源管理器或全局程序集緩存工具,這是因?yàn)樗鼈儾惶峁┦褂?Windows 安裝程序時(shí)可以提供的程序集引用計(jì)數(shù)功能和其他功能。

            管理員通常使用訪(fǎng)問(wèn)控制列表 (ACL) 來(lái)保護(hù) WINNT 目錄,以控制寫(xiě)入和執(zhí)行訪(fǎng)問(wèn)。因?yàn)槿殖绦蚣彺姘惭b在 WINNT 目錄中,它繼承了目錄的 ACL。建議只允許具有“管理員”權(quán)限的用戶(hù)從全局程序集緩存中刪除文件。

            在全局程序集緩存中部署的程序集必須具有強(qiáng)名稱(chēng)。將一個(gè)程序集添加到全局程序集緩存時(shí),必須對(duì)構(gòu)成該程序集的所有文件執(zhí)行完整性檢查。緩存執(zhí)行這些完整性檢查以確保程序集未被篡改(例如,當(dāng)文件已更改但清單未反映此更改時(shí))。

             

            程序集安全注意事項(xiàng)

            在您生成程序集時(shí),您可以指定該程序集運(yùn)行所需的一組權(quán)限。是否將特定的權(quán)限授予程序集是基于證據(jù)的。

            使用證據(jù)有兩種截然不同的方式:

            • 將輸入證據(jù)與加載程序所收集的證據(jù)合并,以創(chuàng)建用于策略決策的最終證據(jù)集。使用這種語(yǔ)義的方法包括 Assembly.LoadAssembly.LoadFromActivator.CreateInstance
            • 原封不動(dòng)地使用輸入證據(jù)作為用于策略決策的最終證據(jù)集。使用這種語(yǔ)義的方法包括 Assembly.Load(byte[])AppDomain.DefineDynamicAssembly()

            通過(guò)在將運(yùn)行程序集的計(jì)算機(jī)上設(shè)置安全策略,您可以授予一些可選的權(quán)限。如果您希望代碼可以處理所有潛在的安全異常,可以執(zhí)行以下操作之一:

            • 為您的代碼必須具有的所有權(quán)限插入權(quán)限請(qǐng)求,并預(yù)先處理在未授予權(quán)限時(shí)發(fā)生的加載時(shí)錯(cuò)誤。
            • 不要使用權(quán)限請(qǐng)求來(lái)獲取您的代碼可能需要的權(quán)限,但一定要準(zhǔn)備處理在未授予權(quán)限時(shí)發(fā)生的安全異常。
              注意   安全性是一個(gè)較為復(fù)雜的領(lǐng)域,您將要作出很多選擇。有關(guān)更多信息,請(qǐng)參見(jiàn)安全性的基礎(chǔ)概念

            在加載時(shí),程序集的證據(jù)用作安全策略的輸入。安全策略是由企業(yè)和計(jì)算機(jī)的管理員以及用戶(hù)策略設(shè)置建立的,它在執(zhí)行時(shí)確定向所有托管代碼授予的權(quán)限組。可以為程序集的發(fā)行者建立(如果該程序集具有符號(hào)代碼簽名)安全策略,或者為該程序集的下載 Web 站點(diǎn)和區(qū)域(就 Internet Explorer 而言)建立安全策略,也可以為該程序集的強(qiáng)名稱(chēng)建立該策略。例如,一臺(tái)計(jì)算機(jī)的管理員可以建立這樣一種安全策略:它允許從某一 Web 站點(diǎn)下載由指定軟件公司簽發(fā)用以訪(fǎng)問(wèn)計(jì)算機(jī)上的數(shù)據(jù)庫(kù)的所有代碼,但不授予對(duì)該計(jì)算機(jī)磁盤(pán)的寫(xiě)訪(fǎng)問(wèn)權(quán)。

            具有強(qiáng)名稱(chēng)的程序集和符號(hào)代碼

            您可以通過(guò)兩種不同但互為補(bǔ)充的方式簽發(fā)程序集:使用強(qiáng)名稱(chēng)或使用 Signcode.exe。使用強(qiáng)名稱(chēng)對(duì)程序集簽名的過(guò)程將向包含程序集清單的文件添加公鑰加密。強(qiáng)名稱(chēng)簽名幫助驗(yàn)證名稱(chēng)的唯一性,避免名稱(chēng)哄騙,并在解析引用時(shí)向調(diào)用方提供某些標(biāo)識(shí)。

            但是,沒(méi)有任何信任級(jí)別與一個(gè)強(qiáng)名稱(chēng)相關(guān)聯(lián),這使符號(hào)代碼十分重要。符號(hào)代碼要求發(fā)行者向第三方證書(shū)頒發(fā)機(jī)構(gòu)證實(shí)其標(biāo)識(shí)并獲取證書(shū)。然后此證書(shū)將嵌入到您的文件中,并且管理員能夠使用該證書(shū)來(lái)決定是否相信這些代碼的真實(shí)性。

            您可以將強(qiáng)名稱(chēng)和符號(hào)代碼數(shù)字簽名一起提供給程序集,或者您可以單獨(dú)使用其中之一。符號(hào)代碼一次只能簽發(fā)一個(gè)文件,對(duì)于多文件程序集,您可以簽發(fā)包含程序集清單的文件。強(qiáng)名稱(chēng)存儲(chǔ)在包含程序集清單的文件中,但符號(hào)代碼簽名存儲(chǔ)在該程序集清單所在的可移植可執(zhí)行 (PE) 文件中專(zhuān)門(mén)保留的槽中。當(dāng)您已經(jīng)具有依賴(lài)于符號(hào)代碼簽名的信任層次結(jié)構(gòu)或者當(dāng)您的策略只使用密鑰部分并且不檢查信任鏈時(shí),就可以使用程序集的符號(hào)代碼簽發(fā)功能(帶或不帶強(qiáng)名稱(chēng))。

            注意   在一個(gè)程序集上同時(shí)使用強(qiáng)名稱(chēng)和符號(hào)代碼簽名時(shí),必須首先分配強(qiáng)名稱(chēng)。

            公共語(yǔ)言運(yùn)行庫(kù)還將執(zhí)行哈希驗(yàn)證;程序集清單包含構(gòu)成該程序集的所有文件的列表,包括當(dāng)生成清單時(shí)存在的每一文件的散列。在加載每一文件時(shí),其內(nèi)容被散列化并與清單中存儲(chǔ)的哈希值進(jìn)行比較。 如果兩個(gè)哈希值不匹配,則無(wú)法加載該程序集。

            因?yàn)閺?qiáng)名稱(chēng)和符號(hào)代碼確保了完整性,因此您可以將代碼訪(fǎng)問(wèn)安全策略建立在這兩種形式的程序集證據(jù)的基礎(chǔ)上。強(qiáng)名稱(chēng)和符號(hào)代碼簽發(fā)通過(guò)數(shù)字簽名和證書(shū)確保完整性。上面提到的所有技術(shù)(哈希驗(yàn)證、強(qiáng)名稱(chēng)和符號(hào)代碼)共同作用,確保程序集沒(méi)有做過(guò)任何方式的改動(dòng)。

            程序集版本控制

            使用公共語(yǔ)言運(yùn)行庫(kù)的程序集的所有版本控制都在程序集級(jí)別上進(jìn)行。一個(gè)程序集的特定版本和依賴(lài)程序集的版本在該程序集的清單中記錄下來(lái)。除非被配置文件(應(yīng)用程序配置文件、發(fā)行者策略文件和計(jì)算機(jī)的管理員配置文件)中的顯式版本策略重寫(xiě),否則運(yùn)行庫(kù)的默認(rèn)版本策略是,應(yīng)用程序只與它們生成和測(cè)試時(shí)所用的程序集版本一起運(yùn)行。

            注意   僅對(duì)具有強(qiáng)名稱(chēng)的程序集進(jìn)行版本控制。

            運(yùn)行庫(kù)執(zhí)行以下幾步來(lái)解析程序集綁定請(qǐng)求:

            1. 檢查原程序集引用,以確定該程序集的版本是否被綁定。
            2. 檢查所有適用的配置文件以應(yīng)用版本策略。
            3. 通過(guò)原程序集引用和配置文件中指定的任何重定向來(lái)確定正確的程序集,并且確定應(yīng)綁定到調(diào)用程序集的版本。
            4. 檢查全局程序集緩存和在配置文件中指定的基本代碼,然后使用在運(yùn)行庫(kù)如何定位程序集中解釋的探測(cè)規(guī)則檢查該應(yīng)用程序的目錄和子目錄。

            下圖說(shuō)明了這些步驟。

            解析程序集綁定請(qǐng)求

            有關(guān)配置應(yīng)用程序的更多信息,請(qǐng)參見(jiàn)配置文件。有關(guān)綁定策略的更多信息,請(qǐng)參見(jiàn)運(yùn)行庫(kù)如何定位程序集

            版本信息

            每一程序集都用兩種截然不同的方法來(lái)表示版本信息:

            • 程序集的版本號(hào),該版本號(hào)與程序集名稱(chēng)及區(qū)域性信息都是程序集標(biāo)識(shí)的組成部分。該號(hào)碼將由運(yùn)行庫(kù)用來(lái)強(qiáng)制實(shí)施版本策略,它在運(yùn)行時(shí)的類(lèi)型解析進(jìn)程中起著重要的作用。
            • 信息性版本,這是一個(gè)字符串,表示僅為提醒的目的而包括的附加版本信息。

            程序集版本號(hào)

            每一程序集都有一個(gè)版本號(hào)作為其標(biāo)識(shí)的一部分。因此,如果兩個(gè)程序集具有不同的版本號(hào),運(yùn)行庫(kù)就會(huì)將它們視作完全不同的程序集。此版本號(hào)實(shí)際表示為具有以下格式的四部分號(hào)碼:

            <major version>.<minor version>.<build number>.<revision>

            例如,版本 1.5.1254.0 中的 1 表示主版本,5 表示次版本,1254 表示內(nèi)部版本號(hào),而 0 則表示修訂號(hào)。

            版本號(hào)與其他標(biāo)識(shí)信息(包括程序集名稱(chēng)和公鑰,以及與該應(yīng)用程序所連接的其他程序集的關(guān)系和標(biāo)識(shí)有關(guān)的信息)一起存儲(chǔ)在程序集清單中。

            在生成程序集時(shí),開(kāi)發(fā)工具將把每一個(gè)被引用程序集的依賴(lài)項(xiàng)信息記錄在程序集清單中。運(yùn)行庫(kù)將這些版本號(hào)與管理員、應(yīng)用程序或發(fā)行者設(shè)置的配置信息結(jié)合使用,以加載被引用程序集的正確版本。

            為進(jìn)行版本控制,運(yùn)行庫(kù)會(huì)區(qū)分常規(guī)程序集和具有強(qiáng)名稱(chēng)的程序集。只對(duì)具有強(qiáng)名稱(chēng)的程序集執(zhí)行版本檢查。

            有關(guān)指定版本綁定策略的信息,請(qǐng)參見(jiàn)配置文件。有關(guān)運(yùn)行庫(kù)如何使用版本信息查找特定程序集的信息,請(qǐng)參見(jiàn)運(yùn)行庫(kù)如何定位程序集

            程序集信息性版本

            信息性版本是一個(gè)字符串,它僅出于提醒的目的將附加的版本信息附加到一個(gè)程序集;此信息不在運(yùn)行時(shí)使用。基于文本的信息性版本相當(dāng)于產(chǎn)品的營(yíng)銷(xiāo)廣告、包裝或產(chǎn)品名稱(chēng),不被運(yùn)行庫(kù)使用。例如,信息性版本可以是“公共語(yǔ)言運(yùn)行庫(kù)版本 1.0”或“NET Control SP 2”。

            信息性版本使用自定義屬性 System.Reflection.AssemblyInformationalVersionAttribute 來(lái)表示。有關(guān)信息性版本屬性的更多信息,請(qǐng)參見(jiàn)設(shè)置程序集屬性

            程序集位置

            對(duì)于大多數(shù) .NET Framework 應(yīng)用程序而言,您可以在以下位置找到構(gòu)成該應(yīng)用程序的程序集,這些位置包括:該應(yīng)用程序的目錄中,該應(yīng)用程序目錄的子目錄中,或全局程序集緩存中(如果該程序集是共享的話(huà))。可以通過(guò)在配置文件中使用 <codeBase> 元素重寫(xiě)公共語(yǔ)言運(yùn)行庫(kù)查找某一程序集的位置。如果該程序集沒(méi)有強(qiáng)名稱(chēng),則使用 <codeBase> 元素指定的位置將被限制在應(yīng)用程序目錄或子目錄中。如果程序集具有強(qiáng)名稱(chēng),則 <codeBase> 能夠指定計(jì)算機(jī)或網(wǎng)絡(luò)上的任意位置。

            當(dāng)在使用非托管代碼或 COM interop 應(yīng)用程序的過(guò)程中查找程序集的位置時(shí),類(lèi)似的規(guī)則同樣適用:如果該程序集將由多個(gè)應(yīng)用程序共享,則此程序集應(yīng)被安裝到全局程序集緩存中。和非托管代碼一起使用的程序集必須作為類(lèi)型庫(kù)導(dǎo)出并注冊(cè)。由 COM interop 使用的程序集必須在目錄中進(jìn)行注冊(cè),盡管有些情況下會(huì)自動(dòng)進(jìn)行此注冊(cè)。

            程序集和并行 (side-by-side) 執(zhí)行

            并行執(zhí)行是在同一臺(tái)計(jì)算機(jī)上存儲(chǔ)和執(zhí)行應(yīng)用程序或組件的多個(gè)版本的能力。這意味著在同一臺(tái)計(jì)算機(jī)上可以同時(shí)有運(yùn)行庫(kù)的多個(gè)版本,并且可以有使用其中某個(gè)運(yùn)行庫(kù)版本的應(yīng)用程序和組件的多個(gè)版本。并行執(zhí)行使您能夠更多地控制應(yīng)用程序綁定到的組件版本和應(yīng)用程序使用的運(yùn)行庫(kù)版本。

            支持并行存儲(chǔ)和執(zhí)行同一程序集的不同版本是強(qiáng)命名中不可缺少的部分,這種支持內(nèi)置于運(yùn)行庫(kù)基礎(chǔ)結(jié)構(gòu)中。因?yàn)閺?qiáng)名稱(chēng)程序集的版本號(hào)是其標(biāo)識(shí)的一部分,所以運(yùn)行庫(kù)能夠在全局程序集緩存中存儲(chǔ)同一程序集的多個(gè)版本,并且在運(yùn)行時(shí)加載這些程序集。

            盡管運(yùn)行庫(kù)使您能夠創(chuàng)建并行應(yīng)用程序,但并行執(zhí)行并不是自動(dòng)進(jìn)行的。有關(guān)創(chuàng)建并行執(zhí)行的應(yīng)用程序的更多信息,請(qǐng)參見(jiàn)并行執(zhí)行的編程暗示。

            -----------------------------------------

            相關(guān)章節(jié)

            使用程序集編程
            描述程序集上的屬性的創(chuàng)建、簽名和設(shè)置過(guò)程。
            發(fā)出動(dòng)態(tài)程序集
            描述如何創(chuàng)建動(dòng)態(tài)程序集。

            posted on 2006-01-05 09:07 夢(mèng)在天涯 閱讀(1176) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): C#/.NET

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計(jì)

            • 隨筆 - 461
            • 文章 - 4
            • 評(píng)論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類(lèi)

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1807518
            • 排名 - 5

            最新評(píng)論

            閱讀排行榜

            国内精品欧美久久精品| 老男人久久青草av高清| 久久综合九色综合97_久久久| 久久99久久99精品免视看动漫| aaa级精品久久久国产片| 久久亚洲高清综合| 久久99精品久久久久久久不卡| 久久国产高清一区二区三区| 日韩精品久久无码人妻中文字幕| 九九久久精品无码专区| 新狼窝色AV性久久久久久| 国产精品激情综合久久| 国产偷久久久精品专区| 久久国产三级无码一区二区| 伊人久久大香线蕉亚洲| 久久国产三级无码一区二区| 99久久久国产精品免费无卡顿| 日韩影院久久| 精品免费久久久久国产一区 | 7777久久亚洲中文字幕| 亚洲欧美久久久久9999| 青草影院天堂男人久久| 粉嫩小泬无遮挡久久久久久 | 久久99热只有频精品8| 伊人久久亚洲综合影院| 久久伊人中文无码| 精品国产婷婷久久久| 久久久久一区二区三区| 久久国产精品一区二区| 精品国产一区二区三区久久久狼 | 99热热久久这里只有精品68| 日韩久久久久久中文人妻| 久久精品中文字幕一区| 大香伊人久久精品一区二区| 伊人久久大香线蕉成人| 国产精品乱码久久久久久软件| 亚洲精品97久久中文字幕无码| 中文精品99久久国产 | 亚洲国产成人精品女人久久久| 99精品久久精品| 伊人色综合久久|