Microsoft.NET框架常見問題(一)
發(fā)布時間:2008-08-07 閱讀數(shù): 次 來源:網(wǎng)樂原科技
Microsoft .NET 框架常見問題
Microsoft Corporation
概念問題
什么是 .NET?
簡單地說,Microsoft® .NET 是 Microsoft 以服務(wù)的方式遞交軟件的一種策略。有關(guān)完整信息,請參閱有關(guān)該主題的白皮書(英文)。
以下是白皮書的摘要,簡要介紹了 .NET 的關(guān)鍵內(nèi)容:
Microsoft .NET 平臺
包括用于創(chuàng)建和操作新一代服務(wù)的 .NET 基礎(chǔ)結(jié)構(gòu)和工具、用于實施多信息客戶端的 .NET 用戶經(jīng)驗,以及用于啟用新一代智能 Internet 設(shè)備的 .NET 構(gòu)造塊服務(wù)和 .NET 設(shè)備軟件。
Microsoft .NET 產(chǎn)品和服務(wù)
包括 Microsoft® Windows.NET(其核心集成了一組構(gòu)造塊服務(wù))、MSN.NET、個人訂閱服務(wù)、Microsoft® Office.NET、Microsoft® Visual Studio.NET 和 Microsoft® bCentral™ for .NET。
第三方 .NET 服務(wù)
許多領(lǐng)域的合作伙伴和開發(fā)人員都有機會在 .NET 平臺上提供企業(yè)和垂直服務(wù)。
此問題針對的是 .NET 框架。.NET 框架是 .NET 平臺基礎(chǔ)結(jié)構(gòu)的一部分。有關(guān) .NET 框架的詳細信息,請參閱下一個問題。
什么是 .NET 框架?
.NET 框架是創(chuàng)建、部署和運行 Web 服務(wù)及其他應(yīng)用程序的一個環(huán)境。它包括三個主要部分:公共語言運行時、框架類和 ASP.NET。
.NET 框架是否只適用于創(chuàng)建 Web 站點的用戶?
.NET 框架使您可以創(chuàng)建優(yōu)秀的 Web 應(yīng)用程序。但它也可以幫助您創(chuàng)建現(xiàn)在的各種應(yīng)用程序。與當(dāng)前創(chuàng)建應(yīng)用程序的方式相比,.NET 在編寫任何 Windows 軟件(使用 ATL/COM、MFC、Microsoft® Visual Basic® 或標(biāo)準 Microsoft® Win32®)方面都具有更大的優(yōu)勢。當(dāng)然,如果您是開發(fā) Web 站點,那么從 ASP.NET 開始,您就會感受到 .NET 框架的強大吸引力。
從何處可以獲得 .NET 框架 SDK?
現(xiàn)在可以從 MSDN Online Downloads(英文)下載 .NET 框架 SDK 的 Beta 1 版。鑒于其大小,我們以多種方式提供此 Beta 版:作為一個下載文件 (106 MB),分為 11 部分下載,或者從 Microsoft Developer Store 定購其 CD:
美國/加拿大(英語)
國際(英語)
.NET 框架可以運行于哪些平臺?
Beta 1 版可以運行在 Microsoft® Windows® 2000、Windows 95/98/ME 和 Windows NT® 4.0 上。
另外,還有一個稱為 .NET 精簡框架的 .NET 框架版本。它用于使蜂窩電話和增強型電視等設(shè)備也具有 .NET 框架的某些功能。.NET 精簡框架將運行在 Windows CE 和其他嵌入式操作系統(tǒng)上。
.NET 框架支持哪些編程語言?
.NET 框架與編程語言無關(guān)。事實上任何語言都可以支持 .NET 框架。目前,您可以用許多語言來創(chuàng)建 .NET 程序,包括:C++、Microsoft® Visual Basic.NET、JScript® 和 Microsoft 的最新語言——C#。以后,也會有大量的第三方語言可以用來創(chuàng)建 .NET 框架應(yīng)用程序,包括 COBOL、Eiffel、Perl、Python、Smalltalk 等等。
.NET 框架和 COM+ 服務(wù)之間是什么關(guān)系?
在 .NET 框架中,不僅可以完全訪問 COM+ 服務(wù),而且也更容易創(chuàng)建服務(wù)組件。
.NET 框架組件可被添加至 COM+ 應(yīng)用程序中。在 COM+ 應(yīng)用程序中,.NET 框架組件可以利用自動組件服務(wù),例如:事務(wù)、對象池、排隊組件、事件等等。
.NET 框架和 DCOM 之間是什么關(guān)系?
DCOM 是用于進程間通訊的 COM 基礎(chǔ)結(jié)構(gòu)。.NET 框架支持大量用于進程間通訊的可插入通道和格式化程序。在托管代碼和非托管代碼之間進行轉(zhuǎn)換時,.NET 框架使用了 COM 基礎(chǔ)結(jié)構(gòu),尤其是 DCOM。所有使用 COM+ 服務(wù)的方案都使用了托管到非托管轉(zhuǎn)換,因此默認使用 DCOM。對于注重互操作性的進程間通訊,.NET 框架也支持 SOAP(簡單對象訪問協(xié)議)。
.NET 框架是否僅僅是 Windows DNA 的新名稱?
不。Windows DNA 是用于創(chuàng)建緊耦合的分布式 Web 應(yīng)用程序的一種體系結(jié)構(gòu)。由于分布式應(yīng)用程序變得需要更多的松耦合原理,因此 Microsoft 在 .NET 中發(fā)展了該體系結(jié)構(gòu)。.NET 框架是 .NET 體系結(jié)構(gòu)的一部分。
運行時技術(shù)問題
術(shù)語
什么是公共語言運行時 (CLR)?
公共語言運行時是 .NET 框架應(yīng)用程序的執(zhí)行引擎。
它提供許多服務(wù),包括:
代碼管理(加載和執(zhí)行)
應(yīng)用程序內(nèi)存隔離
類型安全驗證
IL 到本機代碼的轉(zhuǎn)換
元數(shù)據(jù)(增強的類型信息)訪問
為托管對象管理內(nèi)存
強制代碼訪問安全
異常處理,包括跨語言異常
托管代碼、COM 對象和現(xiàn)有 DLL(非托管代碼和數(shù)據(jù))之間的互操作
自動進行對象布局
對開發(fā)人員服務(wù)(配置、調(diào)試等)的支持
什么是公共類型系統(tǒng) (CTS)?
公共類型系統(tǒng)是多信息類型系統(tǒng),它被內(nèi)置在公共語言運行時中,支持大多數(shù)編程語言中的類型和操作。公共類型系統(tǒng)支持大量編程語言的完全實現(xiàn)。
什么是公共語言規(guī)范 (CLS)?
公共語言規(guī)范是一組結(jié)構(gòu)和限制,用作庫編寫者和編譯器編寫者的指南。它使任何支持 CLS 的語言都可以完全使用庫,并且使這些語言可以相互集成。公共語言規(guī)范是公共類型系統(tǒng)的子集。對于那些需要編寫代碼供其他開發(fā)人員使用的應(yīng)用程序開發(fā)人員,公共語言規(guī)范也非常重要。如果開發(fā)人員遵循 CLS 規(guī)則來設(shè)計公共訪問的 API,那么就可以在支持公共語言運行時的任何其他編程語言中很容易地使用這些 API。
什么是 Microsoft 中間語言 (MSIL)?
MSIL 是與 CPU 無關(guān)的指令集。.NET 框架程序被編譯成 MSIL。它包含加載、存儲、初始化和調(diào)用對象方法的指令。
與元數(shù)據(jù)和公共類型系統(tǒng)結(jié)合,MSIL 允許真正的跨語言集成。
MSIL 在執(zhí)行前被轉(zhuǎn)換為機器代碼,而不是一邊解釋一邊執(zhí)行。
什么是托管代碼和托管數(shù)據(jù)?
托管代碼是編寫為支持公共語言運行時服務(wù)的代碼(請參閱“什么是公共語言運行時?”)。為了支持這些服務(wù),代碼必須向運行時提供最小級別的信息(元數(shù)據(jù))。默認情況下,所有 C#、Visual Basic.NET 和 JScript.NET 代碼都是托管代碼。Visual Studio.NET C++ 代碼在默認情況下不是托管代碼,但通過指定命令行開關(guān) (/CLR),編譯器也可以生成托管代碼。
與托管代碼密切相關(guān)的是托管數(shù)據(jù)。托管數(shù)據(jù)是由公共語言運行時的垃圾回收器進行分配和釋放的數(shù)據(jù)。默認情況下,C#、Visual Basic 和 JScript.NET 數(shù)據(jù)是托管數(shù)據(jù)。不過,通過使用特殊的關(guān)鍵字,C# 數(shù)據(jù)可以被標(biāo)記為非托管數(shù)據(jù)。Visual Studio.NET C++ 數(shù)據(jù)在默認情況下是非托管數(shù)據(jù)(即使在使用 /CLR 開關(guān)時),但是在使用 C++ 的托管擴展時,可以使用“__gc”關(guān)鍵字將類標(biāo)記為托管類。就象該名稱所顯示的那樣,它表示類實例的內(nèi)存由垃圾回收器管理。另外,該類也完全成為 .NET 框架的成員,同時具備它所帶來的好處和限制。好處的一個例子是:它可以與其他語言編寫的類正確地進行互操作(如托管的 C++ 類可以從 Visual Basic 類繼承);限制的一個例子是:托管類只能從一個基類繼承。
程序集
什么是程序集?
程序集是 .NET 框架應(yīng)用程序的主要構(gòu)造塊。它是作為一個單一實現(xiàn)單元(包含一個或多個文件)來創(chuàng)建、標(biāo)識和部署的功能集合。所有的托管類型和資源都可以被標(biāo)記為僅在其實現(xiàn)單元內(nèi)訪問,或者標(biāo)記為可由該單元以外的代碼來訪問。
程序集通過清單來進行自我說明。清單是每個程序集的不可或缺的組成部分。清單:
建立程序集標(biāo)識(以文本名稱的格式)、版本、類別和數(shù)字簽名(如果要在應(yīng)用程序之間共享該程序集)。
定義組成程序集實現(xiàn)的文件(通過名稱和文件散列)。
指定組成程序集的類型和資源,包括哪些是從程序集中導(dǎo)出的。
逐條記錄編譯時對其他程序集的依存。
指定程序集正確運行所需要的權(quán)限的集合。
此信息在運行時用于解析引用、強制版本綁定策略以及驗證所加載的程序集的完整性。因為每一類型都被加載到程序集的上下文中,所以運行時可以確定并定位任何正在運行的對象的程序集。程序集也是應(yīng)用了代碼訪問安全權(quán)限的單元。在確定授予其所包含的代碼哪些權(quán)限時,每個程序集的標(biāo)識證據(jù)都被認為是獨立的。
程序集的自我說明特征也有助于實現(xiàn)無影響安裝和 XCOPY 部署。
什么是專用程序集和共享程序集?
專用程序集僅由單一應(yīng)用程序使用,并且存儲在該應(yīng)用程序的安裝目錄中(或其子目錄中)。共享程序集是可被多個應(yīng)用程序引用的程序集。要共享一個程序集,該程序集必須明確為這個目的而創(chuàng)建,這可以通過給其指定加密的增強型名稱(用作共享名稱)來實現(xiàn)。相反,專用程序集名稱只要求在使用它的應(yīng)用程序中是唯一的。
通過區(qū)分專用和共享程序集,我們介紹明確決定共享的要點。只需簡單地將專用程序集部署在應(yīng)用程序目錄中,即可確保應(yīng)用程序只在創(chuàng)建和部署它的那部分中運行。對專用程序集的引用只在專用應(yīng)用程序目錄內(nèi)部進行解析。
選擇創(chuàng)建和使用共享程序集可以有多種原因,例如表達版本策略的能力。共享程序集具有加密的增強型名稱,這項事實意味著只有程序集的作者才擁有密鑰來生成程序集的新版本。因此,如果您做出策略聲明,希望接受程序集的新版本,則您可以確信版本更新將由作者來控制和驗證。否則,您就不會接受它們。
對于在本地安裝的應(yīng)用程序,共享程序集通常被明確安裝在全局程序集緩存中(程序集的本地緩存由 .NET 框架維護)。.NET 框架的版本管理特性的關(guān)鍵在于下載的代碼不會影響本地安裝的應(yīng)用程序的執(zhí)行。下載的代碼被放在一個特殊的下載緩存中,即使某些下載組件被編譯為共享程序集,也不能在機器上全局使用這些代碼。
與 .NET 框架一起發(fā)布的類都被編譯為共享程序集。
如果我想創(chuàng)建一個共享程序集,在標(biāo)記和管理密鑰對方面是否需要額外的開銷?
創(chuàng)建共享程序集確實涉及到加密密鑰方面的工作。創(chuàng)建程序集時,只有公共密鑰是必要的。支持 .NET 框架的編譯器提供命令行選項(或使用自定義屬性),用于在創(chuàng)建程序集時提供公共密鑰。通常在資源數(shù)據(jù)庫中保留一份常用的公共密鑰,并使編譯腳本指向此密鑰。在發(fā)布程序集之前,必須使用相應(yīng)的私人密鑰將其完全標(biāo)記。這是通過 SDK 工具 SN.exe(增強型名稱)來完成的。
增強型名稱標(biāo)記不象 Authenticode 一樣需要使用證書。它不涉及第三方組織,不需要付費,也不受證書約束。另外,驗證增強型名稱的額外開銷遠遠小于驗證 Authenticode 的開銷。不過,增強型名稱不會生成任何信任某個出版商的語句。增強型名稱使您可以確信給定程序集的內(nèi)容沒有被篡改,在運行時為您加載的程序集來自于您開發(fā)時針對的出版商。但它不會生成有關(guān)是否信任出版商身份的語句。