天天看點

.NET與Microsoft Shared Source CLI

1. .NET

.NET本質上是一個新的開發架構,為傳統Windows作業系統(尤其是Windows2000)API和服務提供全新的程式設計接口,它同時還将Microsoft在90年代晚期開發的各種技術融合起來,這些技術包括COM+元件服務,ASP Web開發架構,對XML和面向對象設計的全面支援,對新的Web服務協定(如SOAP,WSDL,和UDDI)的支援,現在以Internet為中心,都內建在原來的DNA體系中。

.NET平台包括4個不同的産品群:

1 一組語言,包括C#和VB.NET;一套開發工具,包括Visual Studio.NET;一個建立Web服務,Web程式和Windows程式的綜合類庫;以及内置于架構中執行對象的運作期環境CLR(Common Language Runtime,公共語言運作期)。

2 一組.NET企業級伺服器,即原先稱為SQL Server 2000,Exchange 2000,Biztalk 2000等伺服器産品,提供了關系型資料存儲,電子郵件和B2B商務等各種專門功能。

3 一組商用Web服務,即最近釋出的Hailstorm計劃;開發者在付費後可以使用這些服務。

4 新的應用.NET的非PC裝置,從手機到遊戲機。

Microsoft .NET不僅支援語言無關性,而且支援語言的內建性。這意味着可以跨越不同語言繼承類,捕捉異常并應用多态性。.NET架構通過所有.NET元件都需遵守的類型規範CTS(Common Type System,公用類型系統)實作了這一點。

而且.NET還引入CLS(Common Language Specification,公用語言規範),提供了語言繼承必須的一系列基本規則。CLS規定了成為.NET語言的最低要求,符合CLS的編譯器都可以生成彼此能互相操作的對象。整個FCL(Framework Class Library,架構類庫)可以被符合CLS的任何語言使用。

在.NET中,程式并不編譯為可執行檔案,而是編譯成Microsoft IL(Microsoft Intermediate Language,Microsoft中間語言)檔案,而後由CLR去執行,C#生成的Microsoft IL檔案與其他.NET語言完全相同,平台不會區分語言。關于CLR關鍵的一點在于,它是公用的,這個運作期系統既支援用C#,也支援用VB.NET。

C#代碼在Build工程時将被編譯為IL,在運作時,IL會使用即時(JIT,Just in time)編譯器再次編譯,這一過程常被稱為JITing,生成的結果就是機器碼,可以由機器的處理器執行。

2. Microsoft Shared Source CLI的運作引擎包括源代碼,并支援remoting, context model, threading,和code access security。所有這些加在一起是一個包括9000多源檔案的代碼庫。這是微軟釋出的最大的代碼庫。微軟的這個代碼庫嚴格遵循CLI規範。Microsoft Shared Source CLI還包括完整的C#和Jscript編譯器源代碼。還有

ILASM,ILDASM,cordbg.exe, sn.exe, gacutil.exe, al.exe caspol.exe 和peverify.exe等。

Share Source CLI将源代碼最終編譯為5個檔案:Mscorlib.dll, System.dll, System.xml.dll, System.runtime.remoting.dll和System.runtime.serialization.formatters.soap.dll。

Share Source CLI和商業CLR的差異:

Library What's Missing Public Classes Public Classes Missing
System.dll

Most of Microsoft.Win32

Most of System.ComponentModel

Most of System.Diagnostics

System.IO classes

System.Timers

237 274
System.runtime.remoting.dll HttpRemotingHandler 25 3
System.xml.dll No public classes changed 212
Mscorlib.dll Microsoft.Win32.Registry Lots of System.Runtime.Interop-Services All of System.Security.Cryptography 867 188

System.runtime.Serial-ization.formatters

Soap.dll

Nothing 2

因為Share Source CLI是CLR的demo版,不是商業版,你找不到windows forms,ado.net 或者web service這樣的服務。

Share Source CLI的class庫層次

<shapetype id="_x0000_t75" stroked="f" filled="f" path="[email protected]@[email protected]@[email protected]@[email protected]@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 189pt; HEIGHT: 177pt" type="#_x0000_t75"><imagedata o:title="CLIProfiles" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.png"></imagedata></shape>

.NET與Microsoft Shared Source CLI

Share Source CLI的dll依賴:

.NET與Microsoft Shared Source CLI

<shape id="_x0000_i1026" style="WIDTH: 279pt; HEIGHT: 122.25pt" type="#_x0000_t75"><imagedata o:title="dependencies" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image003.png"><font size="3"></font></imagedata></shape>

運作時架構

Share Source CLI的運作時環境實行3個主要認為:

1 loading,實行代碼

2 記憶體管理

3 安全管理

運作時的何姓包含3個類

ClassLoader(clsload.h) 管理IL,metadata的加載和監管什麼時候如何運作JIT編譯器。ClassLoader的運作涉及到EEClass對象(class.h和class.cpp)的事例維護。

FJit (fjit.h) 讀取IL,生成x86機器代碼。JIT用sscli/clr/src/fjit編譯code。

GCHeap(gc.h)記憶體管理和garbage collection。

.NET與Microsoft Shared Source CLI

<shape id="_x0000_i1027" style="WIDTH: 369pt; HEIGHT: 148.5pt" type="#_x0000_t75"><imagedata o:title="coreclasses" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image005.png"><font size="3"></font></imagedata></shape>

下載下傳Share Source CLI

http://msdn.microsoft.com/net/sscli/

建立build環境,調用env.bat檔案,建立環境變量,和所需要到目錄。之後巡行buildall.cmd檔案。結果會生成\build目錄包括30個 dll和23個Exe,還有一些其它支援檔案。

繼續閱讀