本篇文章更適合具有一定開發經驗,一定功底,且對底層代碼有所研究的朋友!!!
本篇文章稍微偏原理且底層,有一定難度和且比較晦澀,文章粒度稍微粗些,更細粒度的,會在后續的文章中,結合具體的Demo實例分析。感興趣的朋友,可以先收藏。
一 .NET框架概述
1.作用:提供了基於.NET框架開發的基礎平台和模板,為.NET開發的基架;
2.基本構成:可支持語言,CLS,模板框架,基本模板,基本操作,基本類庫,公共需要運行時,CTS和CLS,OS等;
(1)可支持語言:.NET框架可支持vb,c++,c#,F#,js等語言開發;
(2)CLS:通用語言規范,使多種語言開發成為了可能,可參考:https://docs.microsoft.com/en-us/dotnet/standard/language-independence-and-language-independent-components
(3)模板框架:B/S模式開發,C/S模式開發,App開發,接口開發
B/S:WebForm和MVC,.NET Core;主要是PC運用程序;
C/S:Winform和WPF,主要是桌面運用程序;
APP:當前主流的一種開發模式;
(4)基本操作:對DB操作(ADO.NET和EF),I/O操作等;
(5)BCL:基本類庫,供調用;
(6)CLR:公共語言運行時,是IL形成EXE必不可少的環節,也是JIT實現一次編譯,多次且跨平台運行的必不可少的環境,在.NET框架中扮演着及其重要的角色,且技術比較難且晦澀;
(7)CTS 和 CLS:CTS,即通用類型系統,實現COM組件兼容等;
(8)OS:屏蔽底層實現,高度抽象,OS類型:Win XP(基本淘汰,微軟官方都不維護了)、Win 7 ,Win 8,Win 10;
3..NET兩大產品:Dynamic CRM 和SharePoint;
(一)ADO.NET
1.作用:程序與數據交互的方式之一。.NET框架中,ADO.NET抽象化了程序與Database的交互,在進行基本的CRUD操作時,只需調用具體的類,方法即可;
2.基本構成:主要由五大對象構成。Conneciton對象,DataAdapter對象,Command對象,DataSet對象,DataReader對象構成;
3.五大對象的基本概述:
(1)Connection對象:連接數據庫的通道,主要方法為Open()和Close(),前者負責打開數據庫入口,后者負責關閉數據庫入口;
(2)Command對象負責對DB的具體操作,CRUD就是通過它實現的;
(3)DataAdapter對象負責將DB與DataSet適配,使基本的CRUD得以實現;
(4)DataSet對象扮演虛擬內存的角色,也扮演緩存的角色,是實現Application與DB數據交互的必要環節之一;
(5)DataReader主要解決讀取數據的問題,性能比較高;
4.建議:具體詳細信息,大家可以參照MSDN,其概述比較詳細;
(二)EF框架
1.作用:為程序員提供更加方便快捷的數據操作,對於初級程序員來說,能很快的上手,極其方便(當然,有經驗的EF開發人員可能經歷過EF的各種坑);
2.三種模式:DB First,Code First,Model First;
3.基本構成:操作工具(Linq To Entity,Entity SQL),ObjectServices,Entity Client,EDM,ADO.NET Data Provider;
(1)Linq To Entity 和Entity SQL:提供了對數據操作的兩種不同方式;
(2)ObjectServices:DB訪問入口,實現實體與數據的轉換;
(3)Entity Client:負責將Linq To Entity和Entity SQL轉化為標准的SQL;
(4)EDM:實現概念模型向存儲模型的轉換;
(5)ADO.NET Data Provider:實現對DB的交互;
(三)程序編譯過程
1.程序編譯過程大致可概述
2.在控制台中操作
Code:

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ProgramRunDemo 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 double sum = AddSum(10.5, 9.5); 14 Console.WriteLine("sum={0}", sum); 15 Console.Read(); 16 } 17 public static double AddSum(double a,double b) 18 { 19 return a + b; 20 } 21 } 22 }
下面我們將AddSum()方法編譯成dll文件
通過反編譯工具.NET Reflector查看IL代碼
下面我們用NotePad++編譯源代碼,用VS的csc.exe編譯器編譯
提示:當在Dos命令中中提示:‘csc’不是內部或外部命令,也不是可運行的程序或批處理文件。
請將.net csc.exe 路徑添加到系統環境變量中,我的csc.exe路徑為
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
不會的,可以參照 csc.exe Path路徑配置
或者參照我的另外一篇文章【java系列】java開發環境搭建
列舉幾個比較常用的csc.exe命令
1 //編譯生成 File.exe 的 File.cs 2 csc File.cs 3 4 //編譯生成 File.dll 的 File.cs 5 csc /target:library File.cs 6 7 //編譯 File.cs 並創建 My.exe 8 csc /out:My.exe File.cs 9 10 //編譯當前目錄中的所有 C# 文件,對其進行優化並定義 DEBUG 符號。 輸出為 File2.exe 11 csc /define:DEBUG /optimize /out:File2.exe *.cs 12 13 //編譯當前目錄中的所有 C# 文件,生成 File2.dll 的調試版本。 不顯示徽標和警告 14 csc /target:library /out:File2.dll /warn:0 /nologo /debug *.cs 15 16 //將當前目錄中的所有 C# 文件編譯為 Something.xyz (DLL) 17 csc /target:library /out:Something.xyz *.cs
關於csc.exe的命令,大家可以參照MSDN:
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/compiler-options/command-line-building-with-csc-exe
3.編譯過程大致可分為兩個階段:
第一階段:.cs代碼=>IL代碼,這個編譯時間比較慢
第二階段:IL+dll通過CRL形成目標代碼,這個過程比較快
大家想想:為什么第一階段比較慢,第二階段比較快呢?將在下面的IL中講到。
(四)CLR
1.作用:內存管理,異常管理,多線程管理,GC管理等。CLR為.NET中極其重要的組成部分,也是.NET框架中比較難且晦澀技術之一。
2.可以把CLR看成是Java虛擬機;
3.JIT即時編譯,主要由三部分構成(主編譯器,PreJit和EconoJit)
4.JIT+CLR實現一次編譯,多次運行且可跨平台;
5.CLR中比較重要的一個環節,就是管道(Pipes)(HttpModule和HttpHandler)
(五)MSIL
1.IL是.cs代碼經過VS編譯器csc.exe編譯而成的;
2.IL比較接近機器代碼但非機器代碼(這個特點使其IL=》.exe過程比較快);
3.IL代碼是指令無關的;
4.可以通過反匯編工具查看IL代碼;
二 基於.NET Framework框架的B/S程序運行解析
(一)總體流程概述
1.IIS在處理請求時,將資源分為兩大類型:靜態資源和動態資源
靜態資源:IMG,JS,CSS,HTML等;
動態文件:ASP,ASP.NET,.aspx,..ashx,asax等;
2.IIS處理靜態資源:
當IIS收到來自瀏覽器的請求,識別為靜態資源時,IIS直接處理,將處理結果以HTML形式返回給瀏覽器;
3.IIS如何處理動態資源?
當IIS收到來自瀏覽器的請求,識別為動態資源時,此時IIS不能處理,轉交給ISAPI Extensions(ISAPI 擴展程序)擴展程序,該擴展程序根據請求資源擴展名,尋找響應的程序處理,如為.asp文件,則asp_isapi處理
,若為.aspx,則aspnet_isapi處理,
4.IIS如何處理WebForm和MVC?
當IIS收到來自瀏覽器的請求,識別為動態資源時,此時IIS不能處理,轉交給ISAPI Extensions處理,此時ASP.NET MVC HTTP處理程序識別請求資源是否為MVC,若是,則交給MVC路由,按照處理MVC方式處理,否則
,按照WebForm流程處理;
5.CLR里面的管道(Pipes)是怎樣的呢?
管道的本質是HttpModule和HttpHandler(一般處理程序.ashx);
(二)CLR和Pipe
(三)TCP/IP模型
1.這個結構為當前比較標准的TCP/IP五層模型,在五層模型成為通用規范前,有七層模型和四層模型兩大種類;
2.關於這五層,謝希仁編寫的《計算機網絡》講得比較詳細且透徹,感興起的朋友可以去看看;
3.為什么要提到TCP/IP呢?很簡單,我們在瀏覽器輸入:http://www.google.com.hk/,發生了過程中,TCP/IP就不可或缺;
4.在這里不多講,會在后續文章WebApi和HTTP協議中詳細講解;
三 參考文獻
【01】http://www.wrox.com/
【02】http://msdn.microsoft.com/en-us/library/system.web.httpapplication(v=vs.80).aspx
【03】ASP.NET MVC5 高級編程(Jon Galloway,Brad Wilson,K.Scott Allen,David Matson 著 ,孫遠帥 譯)
【04】ASP.NET MVC5編程實戰(第3版)(Dino Esposite 著,潘麗丞 譯)
【05】ASP.NET MVC4 開發指南 (黃保翕 作)
【06】計算機網絡 (第6版)(謝希仁 著)
四 服務區
有喜歡的朋友,可以看一下,不喜歡的的朋友,勿噴,謝謝!!
五 版權區
- 感謝您的閱讀,若有不足之處,歡迎指教,共同學習、共同進步。
- 博主網址:http://www.cnblogs.com/wangjiming/。
- 極少部分文章利用讀書、參考、引用、抄襲、復制和粘貼等多種方式整合而成的,大部分為原創。
- 如您喜歡,麻煩推薦一下;如您有新想法,歡迎提出,郵箱:2098469527@qq.com。
- 可以轉載該博客,但必須著名博客來源。