標籤:
NET Core 介紹
標籤: ASP.NETCore
- 1. 前言
- 2. ASP.NET Core 簡介
- 2.1 什麼是ASP.NET Core
- 2.2 ASP.NET Core的特點
- 2.3 ASP.NET Core 專案檔夾解讀
- 2.3.1 專案檔夾總覽
- 2.3.2 project.json和global.json
- 2.3.1 Properties——launchSettings.json
- 2.3.4 Startup.cs
- (1) 建構函式
- (2) ConfigureServices
- (3) Configure
- 2.3.5 bundleconfig.json
- 2.3.6 wwwroot和bower.json
- 2.3.7 appsettings
- 3. 參考資料
1. 前言
作為一個.NET Web開發人員,我最傷心的時候就是項目開發部署時面對Windows Server上貧瘠的解決方案,同樣是神器Nginx,Win上的Nginx便始終不如Linux上的,你或許會說“幹嘛不用windows內建的NLB呢”,那這就是我這個小鳥的從眾心理了,君不見Stack Overflow 2016最新架構中,用的負載和緩衝技術也都是採用在Linux上已經成熟的解決方案嗎。沒辦法的時候找個適合的解決辦法是好事,有辦法的時候當然要選擇最好的解決辦法。
所幸,.ASP.NET Core出現了,它順應了開源大趨勢,擺脫了一直為人詬病的Win Server,以ASP.NET的跨平台版本出現在了我們的眼前。暫且不論Benchmark中無聊的效能比較,也不探討將來是否能和JAVA,PHP Web應用分庭抗禮,但是至少對我們.NET平台開發人員來說,我們多了一種開發方向,也多了一個嘗試前沿成熟技術的機會。所謂工欲善其事,必先利其器,我們先來看看ASP.NET Core是什麼吧。
2. ASP.NET Core 簡介
2.1 什麼是ASP.NET Core
ASP.NET Core 是一個新的開源和跨平台的架構,用於構建如 Web 應用程式、物聯網(IoT)應用和移動後端應用等串連到互連網的雲端式的現代應用程式。ASP.NET Core 應用可運行於 .NET Core 和完整的 .NET Framework 之上。它整合了原來ASP.NET中的MVC和WebApi架構,你可以在 Windows、Mac 和 Linux 上跨平台的開發和運行你的 ASP.NET Core 應用。
2.2 ASP.NET Core的特點
ASP.NET Core 在架構上做出了一些改變,這些改變會使它成為一個更為精簡併且模組化的架構。在project.json檔案中我們可以發現,ASP.NET Core 不再基於 System.Web.dll(我們在project.json中見到的大部分都是Microsoft打頭) ,基於一系列顆粒化的,並且良好構建的 NuGet 包,結合智能提示,它能夠讓你通過僅僅包含需要的 NuGet 包的方法來最佳化你的應用。一個更小的應用程式介面通過“只為你需要的功能付出”(pay-for-what-you-use)的模型獲得的好處包括更可靠的安全性、簡化服務、改進效能和減少成本。
Tips:通過 Ctrl+F5(非偵錯模式)啟動這個應用程式允許你進行代碼更改,儲存檔案,重新整理瀏覽器,之後查看代碼改變。許多開發人員更傾向於使用非偵錯模式來快速啟動應用程式和查看變化。
以下列舉其他幾個改良特點
- 開源和跨平台
- 滿足運行在.NET Core和.NET Framework上
- 中介軟體支援
- 效能最佳化
- 無所不在的依賴注入
- 標準日誌記錄
- 整合MVC和Web Api到一個架構中
- MVC 標籤協助
- CLI工具
2.3 ASP.NET Core 專案檔夾解讀
ASP.NET Core 1.0 發布以來,相較於傳統項目編碼發布的行為,新項目中的操作已經有了很大的變化,如解析依賴,選擇運行平台和Runtime等等,就連項目結構也有了比較大的改變,越來越多的配置選項由編輯器轉交給了開發人員手動決定,這一點在新的各類設定檔中體現得尤為明顯,這裡就來簡單解讀一下。
Tips:順便吐槽一下都Upadte3了,最新的.NET Core項目中,Visual操作中還是有好多明顯的bug呀。
2.3.1 專案檔夾總覽
2.3.2 project.json和global.json
project.json是.NET Core項目中最重要的一個設定檔,它類似於.NET Framework上的 .csrpoj檔案(在下一版本中.NET Core將棄用該檔案,轉而迴歸.csrpoj)。所以這裡還是搬運下張大大的部落格吧,包括對global.json的解讀。
project.json 這葫蘆裡賣的什麼藥
2.3.1 Properties——launchSettings.json
顧名思義——啟動設定檔。launchSettings.json檔案為一個ASP.NET Core應用儲存特有的配置標準,用於應用的啟動準備工作,包括環境變數,開發連接埠等。在launchSettings.json檔案中進行配置修改,和開發人員右鍵項目——屬性中所提交的更改的效果是一樣的(目前右鍵屬性中的Property真是少得可憐),並且支援同步更新。
{ "iisSettings": { #選擇以IIS Express啟動 "windowsAuthentication": false, #是否啟用windows身分識別驗證 "anonymousAuthentication": true, #是否啟用匿名驗證 "iisExpress": { "applicationUrl": "http://localhost:24269/", #IIS Express隨機連接埠 "sslPort": 0 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "WebApplication": { #選擇本地自宿主啟動,詳見Program.cs檔案。刪除該節點也將導致Visual Studio啟動選項缺失 "commandName": "Project", # "launchBrowser": true, "launchUrl": "http://localhost:5000", #本地自宿主連接埠 "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } }}
2.3.4 Startup.cs
Startup.cs檔案是ASP.NET Core的啟動入口檔案,想必嘗試過OWIN開發的一定不會陌生。項目運行時,編譯器會在程式集中自動尋找Startup.cs檔案讀取啟動配置。除了建構函式外,它可以定義Configure和ConfigureServices方法。
(1) 建構函式
用來啟動設定檔Configuration
public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); if (env.IsDevelopment()) //讀取環境變數是否為Development,在launchSettings.json中定義 { // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately. builder.AddApplicationInsightsSettings(developerMode: true); } Configuration = builder.Build(); }
(2) ConfigureServices
ConfigureServices 用來配置我們應用程式中的各種服務,它通過參數擷取一個IServiceCollection 執行個體並可選地返回 IServiceProvider。ConfigureServices 方法需要在 Configure 之前被調用。我們的Entity Framework服務,或是開發人員自訂的依賴注入(ASP.NET Core內建的依賴注入也是無所不在),更多內容請見官方文檔
public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddApplicationInsightsTelemetry(Configuration); services.AddMvc(); }
(3) Configure
Configure 方法用於處理我們程式中的各種中介軟體,這些中介軟體決定了我們的應用程式將如何響應每一個 HTTP 要求。它必須接收一個IApplicationBuilder參數,我們可以手動補充IApplicationBuilder的Use擴充方法,將中介軟體加到Configure中,用於滿足我們的需求。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); app.UseApplicationInsightsRequestTelemetry(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseBrowserLink(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseApplicationInsightsExceptionTelemetry(); app.UseStaticFiles(); app.UseMvc(routes => //MVC路由配置 { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
2.3.5 bundleconfig.json
bundleconfig.json是一個壓縮包的集合檔案(這個不是很明白),這裡有一篇bundleconfig.json specs,大意是它可以自動壓縮關聯檔案用於項目中,如產生 <script> 和 <link>符號.
2.3.6 wwwroot和bower.json
wwwroot是一個存放靜態內容的檔案夾,存放了諸如css,js,img等檔案。剛才提到新的ASP.NET Core使開發靈活度大大提高,檔案配置也都是手動為主,所以既然有存放檔案的wwwroot,那也有存放檔案引用的bower.json:
{ "name": "asp.net", "private": true, "dependencies": { "bootstrap": "3.3.6", "jquery": "2.2.0", "jquery-validation": "1.14.0", "jquery-validation-unobtrusive": "3.2.6" }}
bower.json記錄了項目需要的相關檔案引用,我們可以在裡面自由刪除增加需要的檔案,如jquery.form.js,Bower組態管理員也會自動幫我們在github上下載相關檔案,下載後的檔案也將放在wwwroot檔案夾中。這些改變在項目的“依賴項”上都能直觀查看。
Tips:每個項目中只能有一個bower.json設定檔,對於bower.json的詳細資料請參見Bower —— 管理你的用戶端依賴關係
2.3.7 appsettings
同樣是顧名思義——應用配置,類似於.NET Framework上的Web.Config檔案,開發人員可以將系統參數通過索引值對的方式寫在appsettings檔案中(如程式的連接字串),而Startup類中也在構造器中通過如下代碼使得程式能夠識別該檔案
var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables();
3. 參考資料
- Unbundling scripts for debugging
- Visual Studio 2015 開發 ASP.NET 5 有何變化?
- Docs » Fundamentals » Configuration
- BundlerMinifier
- project.json
- ASP.NET Core 中文文檔 中介軟體
NET Core 介紹