什麼是Asp.net Core?和 .net core有什麼區別?
什麼是Asp.Net core
我相信很多C# Developer
已經對於.net core
不算陌生了,就算沒有正式使用相信也應該有所瞭解。微軟在推出來.net core
的同時為了方便一些原有的專案可以方便遷移,同時推出了Asp.net core
。那麼.net core
和Asp.net core
是不是同一個東西呢?如果不是又有什麼區別呢?
下面我們分別說明一下,首先Asp.net core
和.net core
肯定不是同一個東西(廢話,如果是同一個東西還寫這麼多幹啥!)。
Asp.net core
其實就是仍然基於.net Full Framework
(最低要求Framework 4.6.2
)的專案, 但同時保留了.net core
一些新的設定理念,比如Asp.net core
預設使用Kestrel
作為Http
請求的監聽器,而不是使用原來龐大的Https.sys
。Kestrel
不僅僅是微軟下一代的跨平臺Http
請求監聽器,同時還提供了比Https.sys
更輕量級以及更快速的Http
請求處理。另除此之外,Asp.net core
與原來的Web
設計另一個最大的區別在於Asp.net core
(及.net core
)完全拋棄了原來的使用管道模式來接收以及處理HttpRequest
。在Asp.net core
中允許處理中介軟體(Middleware
)來對所有的HttpRequest
來進行請求,當請求被接收到時,Asp.net core
會呼叫註冊的中介軟體(按照註冊的順序)對HttpRequest
進行處理。這樣做相比與原來使用HttpApplication
的管道方式而言,其優勢在於完全由開發人員決定HttpRequest
需要執行怎麼樣的處理,沒有多餘的其他步驟。而原來的方式既使開發人員不希望對一個HttpRequest
進行任何處理,但HttpApplication
仍然會按照管道的設定依次建立HttpModel
-> 啟用HttpHandler
-> 處理Session
等。據.net core
團隊給出來的效能測試資料來看,Asp.net core
(.net core)相比與原來的Web(.net framework 4.6)程式效能提升了2300%.
而.net core
其實就是保留了上面所說的優勢的同時支援跨平臺執行。.net core
的系統是可以真正執行在除Windows以外的其他平臺的。輕量級、跨平臺、模組化是.net core
整體的設計理念,同時也是微軟產品理念轉變的一個體現。.net core
雖然有千般好,但是我們當前仍然沒有直接使用它,因為它現在有一個致使的“缺陷”那就是生態環境,由於.net core
的API已經完全重寫,雖然當前已經提供了.net farework
90%以上的API,但是仍然會造成一些開發上的不便,當然這還不是最大的問題,最大的問題在於一些第三方Nuget
包仍然不支援.net core
。這樣就會造成一些專案無法直接遷移或是遷移成本太高的問題。
如何建立一個Asp.net core
的專案
說了這麼多,我們來看一下在建立專案時Asp.net core
和.net core
有什麼不同吧,我們以Vistual studio 2017
上建立專案為例,首先開啟VS2017
後點選建立專案-> Asp.net core
web應用,這時會彈出模版選擇的視窗。
在這個選擇視窗中我們可以看到在左上角的那個下拉選單中可以選擇.net framework
以及.net core
。當我們選擇.net framewrok
時建立出來的專案工程即為asp.net core
。專案建立成功後可以在專案的屬性中看到使用的Framework
版本是4.6.2。但是專案檔案的組織結構已經和.net core
的專案結構一樣了。
Asp.net core專案的"坑"
近期在對新的專案進行效能測試時發現系統的記憶體佔用似乎只能使用到1.5G。經過多次測試以及程式碼檢查終於發現新建立出來的Asp.net core
的專案預設的目標平臺是X86而不是AnyCPU。當嘗試在VS中新目標平臺改為AnyCPU時發現專案不能執行,丟擲異常"無法載入 DLL“libuv”: 找不到指定的模組。 (異常來自 HRESULT:0x8007007E)。",無奈只能將專案的目標平臺改為X64,然後發現在開發環境已經一切正常,但是當將程式碼部署到Azure App Service
上時系統仍然不能訪問,異常和上面的相同。最後檢查了專案的工程檔案(*.proj
)然後發現雖然PlatformTarget
一項中已經改為X64
,但是在PlatformTarget
的屬性中Platform
仍然是AnyCPU
,手動修改工程檔案將AnyCPU
改為X64
後一切正常
相關文章
- 通俗易懂,什麼是.NET Core,.NET Core能做什麼
- 為什麼選擇ASP.NET CoreASP.NET
- cookie是什麼?和session有什麼區別?CookieSession
- Java和Python是什麼?有什麼區別?JavaPython
- 什麼是 MicroPython?和CPython有什麼區別?Python
- xpgu是什麼 xgpu和xgp有什麼區別GPU
- linux和ubuntu區別是什麼?有什麼關係?LinuxUbuntu
- 什麼是報表工具?和 EXCEL 有什麼區別?Excel
- Java 介面和抽象類是什麼,有什麼區別Java抽象
- 什麼是SCRM系統?和CRM有什麼區別?
- png是什麼格式 png和jpg有什麼區別
- MySQL、NoSQL分別是什麼?有什麼區別?MySql
- ASP.NET Core 基於宣告的訪問控制到底是什麼鬼?ASP.NET
- CRM和CRM系統是什麼意思,有什麼區別?
- 反向代理是什麼?和正向代理有什麼區別呢?
- C# ASP.NET Core 中 IWebHostEnvironment 介面的作用是什麼?C#ASP.NETWeb
- 什麼是python?與PHP有什麼區別?PythonPHP
- 優思學院|CTP和CTQ是什麼?有什麼區別?
- Python和Go是什麼?它們之間有什麼區別?PythonGo
- 什麼是Python直譯器?和Python IDE有什麼區別?PythonIDE
- 等保1.0和2.0分別是什麼?兩者有什麼區別?
- 為什麼說是時候擁抱.NET CORE了?
- Session是什麼?它與Cookie有什麼區別?SessionCookie
- ASP.NET Core中GetService()和GetRequiredService()之間的區別ASP.NETUI
- asp.net core 3.0中Grpc.AspNetCore.Server帶來了什麼ASP.NETRPCNetCoreServer
- cython和python分別是什麼?區別有哪些?Python
- 記憶體科普:DIMM是指什麼,和DDR有什麼區別?記憶體
- sem和seo有什麼區別?各自的優劣勢是什麼?
- 什麼是Linux?和Unix之間有什麼較大的區別?Linux
- k8s和Docker是什麼?兩者有什麼區別?K8SDocker
- 靜態IP是什麼意思?和動態IP 有什麼區別
- 電腦gpu是什麼意思 gpu和cpu有什麼區別不同GPU
- 原生IP是什麼?與其他IP有什麼區別?
- HTTP和HTTPS是什麼 二者區別是什麼HTTP
- 什麼是PCB?什麼是PCBA?PCB和PCBA的區別?
- 什麼是SRE工程師?SRE工程師和運維有什麼區別?工程師運維
- (十三) 說一下runnable 和 callable 有什麼區別?Future是什麼?
- 雲電視和智慧電視是什麼,之間有什麼區別?