ASP.NET Core 2.0 版本的有什么新特性?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)與策劃設(shè)計,美蘭網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:美蘭等地區(qū)。美蘭做網(wǎng)站價格咨詢:18982081108
前言
ASP.NET Core 的變化和發(fā)展速度是飛快的,當(dāng)你發(fā)現(xiàn)你還沒有掌握 ASP.NET Core 1.0 的時候, 2.0 已經(jīng)快要發(fā)布了,目前 2.0 處于 Preview 1 版本,意味著功能已經(jīng)基本確定,還沒有學(xué)習(xí)過 ASP.NET Core 的同學(xué)可以直接從 2.0 開始學(xué)起,但是如果你已經(jīng)掌握了 1.0 的話,那么你只需要了解在 2.0 中增加和修改的一些功能即可。
每一次大版本的發(fā)布和升級,總會帶給開發(fā)人員一些驚喜和令人興奮的特性,有關(guān) ASP.NET Core 本次的 2.0 版本的新特性,主要集中在幾個部分上。
SDK 的變化
PS: 目前如果你想在VS中體驗 ASP.NET Core 2.0 全部特性的話,你需要 VS 2017.3 預(yù)覽版本。當(dāng)然你可以使用 VS Core 來快速了解。
.NET Core 2.0 Priview 的下載地址:
www.microsoft.com/net/core/preview
完成之后可以在 cmd 中使用以下命令查看版本。
變化1:添加了如下圖箭頭所指新命令。
dotnet new razor dotnet new nugetconfig dotnet new page dotnet new viewimports dotnet new viewstart
添加了這些新的cli命令。 其中 viewimports,viewstart 即為Razor視圖中的_xxx.cshtml那兩個文件.
變化2: dotnet new xxx 將會自動還原 NuGet 包,不需要你再次進(jìn)行 dotnet restore 命令了。
G:\Sample\ASPNETCore2 > dotnet new mvc The template "ASP.NET Core Web App (Model-View-Controller)" was created successfully. This template contains technologies from parties other than Microsoft, see https://aka.ms/template-3pn for details. Processing post-creation actions... Running 'dotnet restore' on G:\Sample\ASPNETCore2\ASPNETCore2.csproj... Restore succeeded.
*.csproj 項目文件
在 2.0 中,當(dāng)創(chuàng)建一個 MVC 項目的時候,生成的 csporj 項目文件如下:
其中,紅色箭頭部分為新增內(nèi)容,我們依次來看一下:
MvcRazorCompileOnPublish:
在 1.0 版本中,如果我們需要在發(fā)布的時候編譯 MVC 中的 Views 文件夾為DLL的話,需要引用
Microsoft.AspNetCore.Mvc.Razor.ViewCompilation 這個 NuGet 包,而現(xiàn)在已經(jīng)不需要了,這個功能已經(jīng)默認(rèn)的集成在了SDK中,只需要在csporj添加配置即可,在發(fā)布的時候?qū)詣哟虬?Views 文件夾中的 *.cshtml 文件為 DLL 程序集。
PackageTargetFallback
這個配置項是用來配置當(dāng)前程序集支持的目標(biāo)框架。
UserSecretsId
這個是用來存儲程序中使用的機(jī)密,以前是存儲在 project.json 文件中,現(xiàn)在你可以在這里進(jìn)行配置了。
有關(guān) UserSecrets 的更多信息,可以查看我的這篇博客文章。
MVC 相關(guān)包
在 Core MVC 2.0 中,所有MVC相關(guān)的NuGet 包都被集成到了這個Microsoft.AspNetCore.All包中,它是一個元數(shù)據(jù)包,包含了大量的東西,其中包括:Authorization, Authentication, Identity, CORS, Localization, Logging, Razor, Kestrel 等,除了這些它還附加了 EntityFramework, SqlServer, Sqlite 等包。
有些同學(xué)可能會覺得這樣會引用了很多項目中使用不到的程序集,導(dǎo)致發(fā)布后的程序變得很龐大,不過我要告訴你不必?fù)?dān)心,發(fā)布后的程序集不但不會變得很大,反而會小很多,因為 Microsoft 把所有的這些依賴全部都集成到了sdk中,也就是說當(dāng)你安裝sdk的之后,MVC相關(guān)的包就已經(jīng)安裝到了你的系統(tǒng)上。
這樣的好處是你不用擔(dān)心更新Nuget包或者刪除的時候,因為大量的版本不一致問題導(dǎo)致隱藏的沖突問題,另外一個好處就是,這樣對于很多新手的話就很友好 2333,他們不需要知道他們什么情況下會從那個NuGet 包中獲取自己需要的信息。
現(xiàn)在,發(fā)布后的文件夾是如此簡潔: 大小 4.3M
再貼個以前的 發(fā)布后的文件夾你們感受一下: 大小 16.5M
有些同學(xué)可能好奇他們把那些引用的 MVC 包放到哪里了,默認(rèn)情況下他們位于這個目錄:
C:\Program Files\dotnet\store\x64\netcoreapp2.0
新的 Program.cs 和 Startup.cs
現(xiàn)在,當(dāng)創(chuàng)建一個 ASP.NET Core 2.0 MVC 程序的時候,Program 和 Startup 已經(jīng)發(fā)生了變化,他們已經(jīng)變成了這樣:
Program.cs
public class Program { public static void Main(string[] args) { BuildWebHost(args).Run(); } public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup() .Build(); }
Startup.cs
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddMvc(); } public void Configure(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?}"); }); } }
可以發(fā)現(xiàn),新的 Program.cs 中和 Startup.cs 中的內(nèi)容已經(jīng)變得很簡單了,少了很多比如 appsetting.json 文件的添加,日志中間件, Kertrel , HostingEnvironment 等,那么是怎么回事呢? 其他他們已經(jīng)被集成到了 WebHost.CreateDefaultBuilder這個函數(shù)中,那么我們跟進(jìn)源碼來看一下內(nèi)部是怎么做的。
WebHost.CreateDefaultBuilder
下面是 WebHost.CreateDefaultBuilder 這個函數(shù)的源碼:
public static IWebHostBuilder CreateDefaultBuilder(string[] args) { var builder = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .ConfigureAppConfiguration((hostingContext, config) => { var env = hostingContext.HostingEnvironment; config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true); if (env.IsDevelopment()) { var appAssembly = Assembly.Load(new AssemblyName(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, KestrelServerOptionsSetup>(); }); return builder; }
可看到,新的方式已經(jīng)隱藏了很多細(xì)節(jié),幫助我們完成了大部分的配置工作。但是你知道怎么樣來自定義這些中間件或者配置也是必要的技能之一。
appsettings.json 的變化
在 appsettings.json 中,我們可以定義 Kestrel 相關(guān)的配置,應(yīng)用程序會在啟動的時候使用該配置進(jìn)行Kerstrel的啟動。
{ "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" } } }
以上配置內(nèi)容配置了 Kertrel 啟動的時候使用的本地地址和端口,以及在生產(chǎn)環(huán)境需要使用的 HTTPS 的配置項,通常情況下關(guān)于 HTTPS 的節(jié)點配置部分應(yīng)該位于 appsettings.Production.json 文件中。
現(xiàn)在,dotnet run在啟動的時候?qū)⑼瑫r監(jiān)聽 9000, 和 9001 端口。
日志的變化
在 ASP.NET Core 2.0 中關(guān)于日志的變化是非常令人欣慰的,因為它現(xiàn)在不是作為MVC中間件配置的一部分了,而是 Host 的一部分,這句話好像有點別扭,囧~。 這意味著你可以記錄到更加底層產(chǎn)生的一些錯誤信息了。
現(xiàn)在你可以這樣來擴(kuò)展日志配置。
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup() .ConfigureLogging(factory=>{你的配置}) .Build();
全新的 Razor Pages
ASP.NET Core 2.0 引入的另外一個令人興奮的特性就是 Razor Pages。提供了另外一種方式可以讓你在做Web 頁面開發(fā)的時候更加的沉浸式編程,或者叫 page-focused 。額...它有點像以前 Web Form Page,它隸屬于 MVC 框架的一部分,但是他們沒有 Controller。
你可以通過dotnet new razor命令來新建一個 Razor Pages 類型的應(yīng)用程序。
Razor Pages 的 cshtml 頁面代碼可能看起來是這樣的:
@page @{ var message = "Hello, World!"; }@message
Razor Pages 的頁面必須具有 @page標(biāo)記。他們可能還會有一個 *.cshtml.cs的 class 文件,對應(yīng)的頁面相關(guān)的一些代碼,是不是很像 Web Form 呢?
有同學(xué)可能會問了,沒有 Controller 是怎么路由的呢? 實際上,他們是通過文件夾物理路徑的方式進(jìn)行導(dǎo)航,比如:
有關(guān) Razor Pages的更多信息可以看這里:
docs.microsoft.com/en-us/aspnet/core/razor-pages
總結(jié)
可以看到,在 ASP.NET Core 2.0 中,給我們的開發(fā)過程帶來了很多便利和幫助,他們包括 Program 等的改進(jìn),包括 MVC 相關(guān) NuGet 包的集成,包括appsetting.json的服務(wù)器配置,以及令人驚訝的Razor Page,是不是已經(jīng)迫不及待的期待正式版的發(fā)布呢?如果你期待的話,點個【推薦】讓我知道吧~ 2333..
如果你對 ASP.NET Core 有興趣的話可以關(guān)注我,我會定期的在博客分享我的學(xué)習(xí)心得。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。