日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

.Net基础体系和跨框架开发普及

發(fā)布時(shí)間:2023/12/4 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net基础体系和跨框架开发普及 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

 .net體系經(jīng)過(guò)十幾年發(fā)展,發(fā)生了很多變化。特別是在最近兩年,隨著開(kāi)源和跨平臺(tái)的發(fā)展,衍生出很多概念,像標(biāo)準(zhǔn)庫(kù),可移植庫(kù),.Net Core等,相信有不少同學(xué)對(duì)他們之間的關(guān)系是有一些困惑的,這里我從基礎(chǔ)概念,跨框架開(kāi)發(fā)的注意事項(xiàng)等,對(duì).net的平臺(tái)和相關(guān)概念做一個(gè)普及分享。此分享是從個(gè)人的知識(shí)體系中總結(jié),如有不足,歡迎勘誤!

一. 基礎(chǔ)概念

  .Net 本身是一個(gè)通用開(kāi)發(fā)平臺(tái),我個(gè)人的理解主要分位如下三個(gè)層面:1. 語(yǔ)言層面,2. 運(yùn)行時(shí)

  首先:在語(yǔ)言層面上

  面向?.net 平臺(tái)的頂層開(kāi)發(fā)語(yǔ)言有很多,常見(jiàn)的如:C#,F#和Visual Basic等,.net框架提供了這些語(yǔ)言使用的公共語(yǔ)言運(yùn)行時(shí),運(yùn)行時(shí)與具體的語(yǔ)言無(wú)關(guān),它定義了這些語(yǔ)言的公共規(guī)范,像類(lèi)型系統(tǒng),文件格式等。

  這些高級(jí)語(yǔ)言編寫(xiě)的代碼被稱(chēng)為托管代碼,這些代碼需要通過(guò)編譯器編譯為中間代碼(IL),然后由公共語(yǔ)言運(yùn)行時(shí)(CLR)接管,再經(jīng)過(guò)JIT編譯為機(jī)器代碼交給cpu運(yùn)行。

  公共語(yǔ)言運(yùn)行時(shí)自動(dòng)處理對(duì)象布局并管理對(duì)象引用,當(dāng)不再使用對(duì)象時(shí)釋放它們。 按這種方式實(shí)現(xiàn)生存期管理的對(duì)象稱(chēng)為托管數(shù)據(jù)。 垃圾回收消除了內(nèi)存泄漏以及其他一些常見(jiàn)的編程錯(cuò)誤。

  其次:運(yùn)行時(shí)層面

  當(dāng)前.net的運(yùn)行時(shí)主要有.Net Framework, Mono for Xamarin和.Net Core 。這些運(yùn)行時(shí)在不同是時(shí)期主要是為了解決當(dāng)時(shí)所面臨的問(wèn)題衍生而出,這里介紹下他們相互的關(guān)聯(lián)和職責(zé)。

  1.?.Net Framework ,這個(gè)是自2002年就已存在的.Net運(yùn)行時(shí),也是現(xiàn)在開(kāi)發(fā)人員還在經(jīng)常使用的框架。涵蓋了桌面,web等應(yīng)用,同時(shí)包含了一些特定于windows的api,不過(guò)其只能運(yùn)行在windows平臺(tái)的限制,給對(duì)跨系統(tǒng)平臺(tái)要求較高的開(kāi)發(fā)需求造成很大的困難,非常適合用于桌面應(yīng)用的開(kāi)發(fā)。

  2.?Mono for Xamarin ,這個(gè)是當(dāng)時(shí)為了實(shí)現(xiàn).net 的跨系統(tǒng)運(yùn)行,在2004年非官方組織發(fā)布的一個(gè).Net運(yùn)行時(shí),當(dāng)時(shí)主要是能夠支持在.net framework下編寫(xiě)的代碼在linux等系統(tǒng)下運(yùn)行,當(dāng)前主要包含適用于 iOS、Android、Xamarin.Forms 和 Xamarin.Mac 的 API。 Mono for Xamarin 非常適合生成 iOS 和 Android 移動(dòng)應(yīng)用程序。

  3. .Net Core 這個(gè)是微軟官方發(fā)布的.Net運(yùn)行時(shí),主要為了打破.net framework的系統(tǒng)限制,實(shí)現(xiàn)跨操作系統(tǒng)平臺(tái)的開(kāi)發(fā),在一定程序上正在取代后者,官方定義它是 ASP.NET Core 和通用 Windows 平臺(tái) (UWP) 所使用的運(yùn)行時(shí)。 它新式、高效,專(zhuān)用于處理大規(guī)模的服務(wù)器和云工作負(fù)荷。

  這三個(gè)運(yùn)行時(shí),.Net 開(kāi)發(fā)人員一定要有一個(gè)清醒的認(rèn)識(shí),他們之間的關(guān)系見(jiàn)下圖,我們搞清楚運(yùn)行時(shí)之間的關(guān)系之后,就可以繼續(xù)了解三者之間類(lèi)庫(kù)框架的關(guān)系了

  

二. ?跨框架開(kāi)發(fā)介紹

  上邊主要介紹的是當(dāng)前的.net 平臺(tái)的基信息,同時(shí),因?yàn)橄到y(tǒng)支持的不同,在不同運(yùn)行時(shí)下的支持框架又會(huì)有自己不同的特性。 特別是在.Net Core 的逐漸成熟,新舊項(xiàng)目的跨框架支持的需求會(huì)越來(lái)越多,如何跨框架類(lèi)庫(kù)共享,舊項(xiàng)目如何擴(kuò)展支持是個(gè)不得不面對(duì)的問(wèn)題。

  如何跨框架開(kāi)發(fā),微軟在這個(gè)問(wèn)題上先后給出了兩個(gè)解決方案,一是創(chuàng)建多目標(biāo).net core 項(xiàng)目,第二個(gè)是創(chuàng)建可移植類(lèi)庫(kù)(Portable)或標(biāo)準(zhǔn)庫(kù)(.Net Standard),第一種方式的實(shí)現(xiàn)我會(huì)在下邊的實(shí)現(xiàn)中講解,這里先介紹下第二種方式的由來(lái),這兩種在作用上目的是一樣的,只是范圍和方式略微有所不同,其中.Net Standard 被認(rèn)為是最好的解決方案。

  .Net Standard的官方解釋是:.NET 標(biāo)準(zhǔn)庫(kù)是一套正式的 .NET API 規(guī)范,有望在所有 .NET 運(yùn)行時(shí)中推出。 推出標(biāo)準(zhǔn)庫(kù)的動(dòng)機(jī)是在 .NET 生態(tài)系統(tǒng)中建立更好的統(tǒng)一性。 ECMA 335 持續(xù)為 .NET 運(yùn)行時(shí)行為建立統(tǒng)一性,但適用于 .NET 庫(kù)實(shí)現(xiàn)的 .NET 基類(lèi)庫(kù) (BCL) 沒(méi)有類(lèi)似的規(guī)范。

  其主要目的就是規(guī)范?.net 不同運(yùn)行時(shí)下的框架,提出一套可以通用的api標(biāo)準(zhǔn)。先來(lái)看看當(dāng)前微軟官方框架以及當(dāng)前版本的詳細(xì)信息:

  也就是其他框架可以實(shí)現(xiàn)自己的特性,但同時(shí)也要實(shí)現(xiàn)對(duì)應(yīng)的.net standard框架api,那么就可以在有需求的框架類(lèi)庫(kù)中直接使用對(duì)應(yīng)版本的.net standard框架的類(lèi)庫(kù)。下邊給出.net standard和其他框架(圖中叫平臺(tái))的版本對(duì)照關(guān)系:

  如果我們需要新建的項(xiàng)目能夠同時(shí)支持.net core 和 .net framework那么我們只需要在vs 2017中新建一個(gè).net standard類(lèi)庫(kù)就好了,如果你使用的是vs2015,那你可以新建 可移植類(lèi)庫(kù)[英文版對(duì)應(yīng): Class Library (Portable) ],然后在屬性的窗口下切換到.Net Standard 類(lèi)庫(kù)即可。

  可移植類(lèi)庫(kù)和標(biāo)準(zhǔn)庫(kù)目的都是一樣,主要是影響的上有所不同,新建可移植類(lèi)庫(kù)是會(huì)讓你選擇對(duì)應(yīng)的框架,當(dāng)前類(lèi)庫(kù)的實(shí)現(xiàn)接口取所選框架的交集,而標(biāo)準(zhǔn)庫(kù)則和具體框架無(wú)關(guān),對(duì)應(yīng)版本的接口都已規(guī)范好。

  

三. ?跨框架開(kāi)發(fā)實(shí)現(xiàn)

  當(dāng)你需要同時(shí)對(duì)單一項(xiàng)目提供對(duì).net core 和framework的支持,有兩種情況我們可以選擇,分別是直接建立.net core多目標(biāo)項(xiàng)目和 建立可移植類(lèi)庫(kù)或者標(biāo)準(zhǔn)庫(kù)

  1. 使用多目標(biāo).net core 項(xiàng)目

  使用這個(gè)方式主要場(chǎng)景是 必須對(duì)某些項(xiàng)目提供framework的特殊功能支持,同時(shí)又不希望建立兩個(gè)獨(dú)立的項(xiàng)目。

  這種方式的好處是單個(gè)項(xiàng)目能夠快速編譯出不同的目標(biāo)版本dll,劣勢(shì)是可能無(wú)法在同一解決方案中直接引用當(dāng)前項(xiàng)目。

  實(shí)現(xiàn)方式:

  a. 新建.net core 項(xiàng)目

  b. 修改project.json文件,添加framework的版本,如:

?

  c. 針對(duì)特定目標(biāo)的代碼,直接使用條件編譯符號(hào)即可,這里是對(duì)應(yīng)的目標(biāo)版本對(duì)應(yīng)關(guān)系,也是條件編譯的變量名:

  .NET Framework 2.0 --> net20
  .NET Framework 3.0 --> net30
  .NET Framework 3.5 --> net35
  .NET Framework 4.0 --> net40
  .NET Framework 4.5 --> net45
  .NET Framework 4.5.1 --> net451
  .NET Framework 4.5.2 --> net452
  .NET Framework 4.6 --> net46
  .NET Framework 4.6.1 --> net461
  .NET Framework 4.6.2 --> net462
  .NET Framework 4.6.3 --> net463

  d. 編譯生成即可,可以去debug文件夾下查看對(duì)應(yīng)目標(biāo)的dll

  

  2. 使用標(biāo)準(zhǔn)庫(kù)或者可移植類(lèi)庫(kù),這個(gè)比較簡(jiǎn)單,只是vs2017才支持直接創(chuàng)建標(biāo)準(zhǔn)庫(kù)項(xiàng)目,如果在2015中有需要可以先創(chuàng)建可移植項(xiàng)目,去屬性頁(yè)修改目標(biāo)即可,如圖:

以上是我個(gè)人對(duì)當(dāng)前.Net體系下的理解,這里給出官方的完整平臺(tái)圖譜:

?

下篇文章我將實(shí)戰(zhàn)演示OSS.Common項(xiàng)目的遷移過(guò)程,如果你有興趣,可以添加公眾號(hào)(osscoder):

原文地址:http://www.cnblogs.com/sunhoy/p/6371178.html


.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的.Net基础体系和跨框架开发普及的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。