1. 程式人生 > >ASP.NET Core 2.0 新功能彙總

ASP.NET Core 2.0 新功能彙總

前言

ASP.NET Core 的變化和發展速度是飛快的,當你發現你還沒有掌握 ASP.NET Core 1.0 的時候, 2.0 已經快要釋出了,目前 2.0 處於 Preview 1 版本,意味著功能已經基本確定,還沒有學習過 ASP.NET Core 的同學可以直接從 2.0 開始學起,但是如果你已經掌握了 1.0 的話,那麼你只需要瞭解在 2.0 中增加和修改的一些功能即可。

每一次大版本的釋出和升級,總會帶給開發人員一些驚喜和令人興奮的特性,有關 ASP.NET Core 本次的 2.0 版本的新特性,主要集中在幾個部分上。

SDK 的變化

PS: 目前如果你想在VS中體驗 ASP.NET Core 2.0 全部特性的話,你需要 VS 2017.3 預覽版本。當然你可以使用 VS Core 來快速瞭解。

完成之後可以在 cmd 中使用以下命令檢視版本。

變化1:添加了如下圖箭頭所指新命令。

12345 dotnet newrazordotnet newnugetconfigdotnet newpagedotnet newviewimportsdotnet
newviewstart

添加了這些新的cli命令。 其中 viewimports,viewstart 即為Razor檢視中的_xxx.cshtml那兩個檔案.

變化2dotnet new xxx 將會自動還原 NuGet 包,不需要你再次進行 dotnet restore 命令了。

12345678 G:SampleASPNETCore2>dotnet newmvcThe template"ASP.NET Core Web App (Model-View-Controller)"was created successfully.Thistemplate contains technologies from parties other than Microsoft,see https://aka.ms/template-3pn for details.Processing post-creation actions...Running'dotnet restore'onG:SampleASPNETCore2ASPNETCore2.csproj...Restore succeeded.

*.csproj 專案檔案

在 2.0 中,當建立一個 MVC 專案的時候,生成的 csporj 專案檔案如下:

其中,紅色箭頭部分為新增內容,我們依次來看一下:

MvcRazorCompileOnPublish

在 1.0 版本中,如果我們需要在釋出的時候編譯 MVC 中的 Views 資料夾為DLL的話,需要引用
Microsoft.AspNetCore.Mvc.Razor.ViewCompilation 這個 NuGet 包,而現在已經不需要了,這個功能已經預設的整合在了SDK中,只需要在csporj新增配置即可,在釋出的時候將會自動打包 Views 資料夾中的 *.cshtml 檔案為 DLL 程式集。

PackageTargetFallback

這個配置項是用來配置當前程式集支援的目標框架。

UserSecretsId

這個是用來儲存程式中使用的機密,以前是儲存在 project.json 檔案中,現在你可以在這裡進行配置了。

有關 UserSecrets 的更多資訊,可以檢視我的這篇部落格文章

MVC 相關包

1 <packagereference include="Microsoft.AspNetCore.All"version="2.0.0-preview1-final"/>

在 Core MVC 2.0 中,所有MVC相關的NuGet 包都被整合到了這個Microsoft.AspNetCore.All包中,它是一個元資料包,包含了大量的東西,其中包括:Authorization, Authentication, Identity, CORS, Localization, Logging, Razor, Kestrel 等,除了這些它還附加了 EntityFramework, SqlServer, Sqlite 等包。

有些同學可能會覺得這樣會引用了很多專案中使用不到的程式集,導致釋出後的程式變得很龐大,不過我要告訴你不必擔心,釋出後的程式集不但不會變得很大,反而會小很多,因為 Microsoft 把所有的這些依賴全部都整合到了sdk中,也就是說當你安裝sdk的之後,MVC相關的包就已經安裝到了你的系統上。

這樣的好處是你不用擔心更新Nuget包或者刪除的時候,因為大量的版本不一致問題導致隱藏的衝突問題,另外一個好處就是,這樣對於很多新手的話就很友好 2333,他們不需要知道他們什麼情況下會從那個NuGet 包中獲取自己需要的資訊。

現在,釋出後的資料夾是如此簡潔: 大小 4.3M

再貼個以前的 釋出後的資料夾你們感受一下: 大小 16.5M

有些同學可能好奇他們把那些引用的 MVC 包放到哪裡了,預設情況下他們位於這個目錄:

C:Program Filesdotnetstorex64netcoreapp2.0

新的 Program.cs 和 Startup.cs

現在,當建立一個 ASP.NET Core 2.0 MVC 程式的時候,Program 和 Startup 已經發生了變化,他們已經變成了這樣:

Program.cs

123456789101112 publicclassProgram{publicstaticvoidMain(string[]args){BuildWebHost(args).Run();}publicstaticIWebHost BuildWebHost(string[]args)=>WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().Build();}

Startup.cs

1234567891011121314151617181920212223242526272829303132333435 publicclassStartup{publicStartup(IConfiguration configuration){Configuration=configuration;}publicIConfigurationConfiguration{get;}publicvoidConfigureServices(IServiceCollection services){services.AddMvc();}publicvoidConfigure(IApplicationBuilder app,IHostingEnvironment env){if(env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseExceptionHandler("/Home/Error");}app.UseStaticFiles();app.UseMvc(routes=>{routes.MapRoute(name:"default",template:"{controller=Home}/{action=Index}/{id?}");});}}

可以發現,新的 Program.cs 中和 Startup.cs 中的內容已經變得很簡單了,少了很多比如 appsetting.json 檔案的新增,日誌中介軟體, Kertrel , HostingEnvironment 等,那麼是怎麼回事呢? 其他他們已經被整合到了 WebHost.CreateDefaultBuilder 這個函式中,那麼我們跟進原始碼來看一下內部是怎麼做的。

WebHost.CreateDefaultBuilder

下面是 WebHost.CreateDefaultBuilder 這個函式的原始碼:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546 publicstaticIWebHostBuilder CreateDefaultBuilder(string[]args){varbuilder=newWebHostBuilder().UseKestrel().UseContentRoot(Directory.GetCurrentDirectory()).ConfigureAppConfiguration((hostingContext,config)=>{varenv=hostingContext.HostingEnvironment;config.AddJsonFile("appsettings.json",optional:true,reloadOnChange:true).AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional:true,reloadOnChange:true);if(env.IsDevelopment()){varappAssembly=Assembly.Load(newAssemblyName(env.ApplicationName));if(appAssembly!=null){config.AddUserSecrets(appAssembly,optional:true);}}config.AddEnvironmentVariables();if(args!=null){config.AddCommandLine(args);}}).ConfigureLogging((hostingContext,logging)=>{logging.UseConfiguration(hostingContext.Configuration.GetSection("Logging"));logging.AddConsole();logging.AddDebug();}).UseIISIntegration().UseDefaultServiceProvider((context,options)=>{options.ValidateScopes=context.HostingEnvironment.IsDevelopment();}).ConfigureServices(services=>{services.AddTransient<IConfigureOptions<KestrelServerOptions>,KestrelServerOptionsSetup>();});returnbuilder;}

可看到,新的方式已經隱藏了很多細節,幫助我們完成了大部分的配置工作。但是你知道怎麼樣來自定義這些中介軟體或者配置也是必要的技能之一。

appsettings.json 的變化

在 appsettings.json 中,我們可以定義 Kestrel 相關的配置,應用程式會在啟動的時候使用該配置進行Kerstrel的啟動。

123456789101112131415161718192021222324252627282930 {"Kestrel":{"Endpoints":{"Localhost":{"Address":"127.0.0.1","Port":"9000"},"LocalhostHttps":{"Address":"127.0.0.1","Port":"9001","Certificate":"Https"}}},"Certificate":{"HTTPS":{"Source":"Store","StoreLocation":"LocalMachine","StoreName":"MyName","Subject":"CN=localhost","AllowInvalid":true}},"Logging":{"IncludeScopes":false,"LogLevel":{"Default":"Warning"}}}

以上配置內容配置了 Kertrel 啟動的時候使用的本地地址和埠,以及在生產環境需要使用的 HTTPS 的配置項,通常情況下關於 HTTPS 的節點配置部分應該位於 appsettings.Production.json 檔案中。

現在,dotnet run在啟動的時候將同時監聽 9000, 和 9001 埠。

日誌的變化

在 ASP.NET Core 2.0 中關於日誌的變化是非常令人欣慰的,因為它現在不是作為MVC中介軟體配置的一部分了,而是 Host 的一部分,這句話好像有點彆扭,囧~。 這意味著你可以記錄到更加底層產生的一些錯誤資訊了。

現在你可以這樣來擴充套件日誌配置。

12345 publicstaticIWebHost BuildWebHost(string[]args)=>WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().ConfigureLogging(factory=>{你的配置}).Build();

全新的 Razor Pages

ASP.NET Core 2.0 引入的另外一個令人興奮的特性就是 Razor Pages。提供了另外一種方式可以讓你在做Web 頁面開發的時候更加的沉浸式程式設計,或者叫 page-focused 。額…它有點像以前 Web Form Page,它隸屬於 MVC 框架的一部分,但是他們沒有 Controller。

你可以通過 dotnet new razor 命令來新建一個 Razor Pages 型別的應用程式

Razor Pages 的 cshtml 頁面程式碼可能看起來是這樣的:

12345678

相關推薦

ASP.NET Core 2.0 功能彙總

前言 ASP.NET Core 的變化和發展速度是飛快的,當你發現你還沒有掌握 ASP.NET Core 1.0 的時候, 2.0 已經快要釋出了,目前 2.0 處於 Preview 1 版本,意味著功能已經基本確定,還沒有學習過 ASP.NET Core 的同學可以直接從 2.0 開始學起,但是如果你已經

Asp.net Core 2.0連接mysql數據庫一系列錯誤問題

alt sql mysql mysql數據庫 work image sql數據庫 報錯 entity mysql:最新版 一定是最新版,不然各種報錯 Install-Package Pomelo.EntityFrameworkCore.MySql 2.0.0-rtm-100

03、手工創建Asp.Net Core 2.0 web應用程序(探索最小架構)

log bho 啟動 oid img gif method nuget ica 03、手工創建Asp.Net Core 2.0 web應用程序(探索最小架構) 一、創建一個幹凈的控制臺程序 這裏我們使用的開發工具是VS2017 項目只有一個Program.cs類。

一起學ASP.NET Core 2.0學習筆記(一): CentOS下 .net core2 sdk nginx、supervisor、mysql環境搭建

image dev 預覽 def star fig brush rest aspnet 作為.neter,看到.net core 2.0的正式發布,心裏是有點小激動的,迫不及待的體驗了一把,發現速度確實是快了很多,其中也遇到一些小問題,所以整理了一些學習筆記: 閱讀目

一起學ASP.NET Core 2.0學習筆記(二): ef core2.0 及mysql provider 、Fluent API相關配置及遷移

upd order rac option 包管理 rtl code create .net core 不得不說微軟的技術叠代還是很快的,上了微軟的船就得跟著她走下去,前文一起學ASP.NET Core 2.0學習筆記(一): CentOS下 .net core2 s

ASP.NET Core 2.0 源代碼

安裝 nal 支持 介紹 作者 framework 重新啟動 stack 參考資料 ASP.NET Core 2.0 源代碼 在Visual Studio 2017中可以通過符號以及源鏈接,非常方便對 ASP.NET Core 2.0中源代碼進行調試。在這篇文章中,我們將重

從頭編寫 asp.net core 2.0 web api 基礎框架 (2)

req new 定義 問題 ... htm error 期待 實驗 上一篇是: http://www.cnblogs.com/cgzl/p/7637250.html Github源碼地址是: https://github.com/solenovex/Building-asp

從頭編寫 asp.net core 2.0 web api 基礎框架 (3)

cep -- 以及 我們 lease ogg 適合 targe crud 第一部分: http://www.cnblogs.com/cgzl/p/7637250.html 第二部分:http://www.cnblogs.com/cgzl/p/7640077.html Git

ASP.net core 2.0.0asp.net identity 2.0.0 的基本使用(一)

使用 相對路徑 註意 apps 模型視圖 hand getc 技術分享 star 開發環境:vs2017 版本:15.3.5 項目環境:.net framework 4.6.1 模板asp.net core 2.0 Web應用程序(模型視圖控制器) 身份

ASP.net Core 2.0 EF (mysql) 遷移 正確姿勢

com update reat .com ttr 數據庫 pda creat mic 用於進行遷移的 Entity Framework Core NuGet 包 註意:必須通過編輯 .csproj 文件來安裝此包;不能使用 install-package 命令或程序包管理器

asp.net core 2.0 webapi集成signalr

soft onf everyone text hosting tro 不能 .com fault 在博客園也很多年了,一直未曾分享過什麽東西,也沒有寫過博客,但自己也是汲取著博客園的知識成長的; 這兩天想著不能這麽無私,最近.NET CORE貌似挺流行的,

ASP.NET Core 2.0 Cookie Authentication

pen builder class end collect exce enc ati develop using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Builder

Asp.net core 2.0.1 Razor 的使用學習筆記(一)

提升 完成後 安全 provider razor 官方 one text .cn 環境:vs2017 版本:15.5.6 這裏說明下, Razor頁面模式跟mvc出現了嚴重的不同。正如微軟官方說的一樣“Razor 頁面是 ASP.NET Core MVC 的一

Asp.net core 2.0.1 Razor 的使用學習筆記(三)

post 應用程序 新的 entity gin start 密碼強度 ice httponly ASP.net core 2.0.1 中 asp.net identity 2.0.1 的基本使用(二)—用戶賬戶及cookie配置 修改用戶賬戶及cookie配置

ASP.Net Core 2.0: 二. 開發環境

class 要求 blank 安裝 col ans 裝包 fly code macOS:Install Visual Studio for Mac 系統要求: macOS 10.12 Sierra 及更高版本 其他要求: 可能會要求安裝xcode或android相關環境

Validate Model State automatically in ASP.NET Core 2.0

開始 lte 定義 新一代 get www. true 狀態 ins if (!ModelState.IsValid) { //TODO 模型驗證失敗需要做的事情 } 上面的代碼不管是在傳統的ASP.NET還是新一代ASP.NET Core中都是為了驗證模型的狀

ASP.NET Core 2.0 : 四. _Layout與_ViewStart

exception 做了 com xcod exe ren xxx oot netcore 本章我們新建一個項目,並通過這個項目熟悉一下_Layout與_ViewStart以及它們的加載順序. 新建一個項目 首先, 文件->新建一個解決方案 選擇.Net C

ASP.NET Core 2.0 : 四. _Layout與_ViewStart

asp proc could not http 成了 輸入 打開 9.png alt 本章我們新建一個項目,並通過這個項目熟悉一下_Layout與_ViewStart以及它們的加載順序. 新建一個項目 首先, 文件->新建一個解決方案 選擇.Net Core 的A

用VSCode開發一個asp.net core 2.0+angular 5項目(4): Angular5全局錯誤處理

create 打印 事件 如果 log 異步操作 truct gin 按鈕 第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.html

用VSCode開發一個asp.net core2.0+angular5項目(5): Angular5+asp.net core 2.0 web api文件上傳

owb bus sed loaded runt ace created one 做了 第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.