ASP.NET Core 2.0 版本的有什么新特性?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),美蘭網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:美蘭等地區(qū)。美蘭做網(wǎng)站價(jià)格咨詢:18982081108
前言
ASP.NET Core 的變化和發(fā)展速度是飛快的,當(dāng)你發(fā)現(xiàn)你還沒(méi)有掌握 ASP.NET Core 1.0 的時(shí)候, 2.0 已經(jīng)快要發(fā)布了,目前 2.0 處于 Preview 1 版本,意味著功能已經(jīng)基本確定,還沒(méi)有學(xué)習(xí)過(guò) ASP.NET Core 的同學(xué)可以直接從 2.0 開(kāi)始學(xué)起,但是如果你已經(jīng)掌握了 1.0 的話,那么你只需要了解在 2.0 中增加和修改的一些功能即可。
每一次大版本的發(fā)布和升級(jí),總會(huì)帶給開(kāi)發(fā)人員一些驚喜和令人興奮的特性,有關(guān) ASP.NET Core 本次的 2.0 版本的新特性,主要集中在幾個(gè)部分上。
SDK 的變化
PS: 目前如果你想在VS中體驗(yàn) ASP.NET Core 2.0 全部特性的話,你需要 VS 2017.3 預(yù)覽版本。當(dāng)然你可以使用 VS Core 來(lái)快速了解。
.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那兩個(gè)文件.
變化2: dotnet new xxx 將會(huì)自動(dòng)還原 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 項(xiàng)目文件
在 2.0 中,當(dāng)創(chuàng)建一個(gè) MVC 項(xiàng)目的時(shí)候,生成的 csporj 項(xiàng)目文件如下:
其中,紅色箭頭部分為新增內(nèi)容,我們依次來(lái)看一下:
MvcRazorCompileOnPublish:
在 1.0 版本中,如果我們需要在發(fā)布的時(shí)候編譯 MVC 中的 Views 文件夾為DLL的話,需要引用
Microsoft.AspNetCore.Mvc.Razor.ViewCompilation 這個(gè) NuGet 包,而現(xiàn)在已經(jīng)不需要了,這個(gè)功能已經(jīng)默認(rèn)的集成在了SDK中,只需要在csporj添加配置即可,在發(fā)布的時(shí)候?qū)?huì)自動(dòng)打包 Views 文件夾中的 *.cshtml 文件為 DLL 程序集。
PackageTargetFallback
這個(gè)配置項(xiàng)是用來(lái)配置當(dāng)前程序集支持的目標(biāo)框架。
UserSecretsId
這個(gè)是用來(lái)存儲(chǔ)程序中使用的機(jī)密,以前是存儲(chǔ)在 project.json 文件中,現(xiàn)在你可以在這里進(jìn)行配置了。
有關(guān) UserSecrets 的更多信息,可以查看我的這篇博客文章。
MVC 相關(guān)包
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0-preview1-final" />
在 Core MVC 2.0 中,所有MVC相關(guān)的NuGet 包都被集成到了這個(gè)Microsoft.AspNetCore.All包中,它是一個(gè)元數(shù)據(jù)包,包含了大量的東西,其中包括:Authorization, Authentication, Identity, CORS, Localization, Logging, Razor, Kestrel 等,除了這些它還附加了 EntityFramework, SqlServer, Sqlite 等包。
有些同學(xué)可能會(huì)覺(jué)得這樣會(huì)引用了很多項(xiàng)目中使用不到的程序集,導(dǎo)致發(fā)布后的程序變得很龐大,不過(guò)我要告訴你不必?fù)?dān)心,發(fā)布后的程序集不但不會(huì)變得很大,反而會(huì)小很多,因?yàn)?Microsoft 把所有的這些依賴全部都集成到了sdk中,也就是說(shuō)當(dāng)你安裝sdk的之后,MVC相關(guān)的包就已經(jīng)安裝到了你的系統(tǒng)上。
這樣的好處是你不用擔(dān)心更新Nuget包或者刪除的時(shí)候,因?yàn)榇罅康陌姹静灰恢聠?wèn)題導(dǎo)致隱藏的沖突問(wèn)題,另外一個(gè)好處就是,這樣對(duì)于很多新手的話就很友好 2333,他們不需要知道他們什么情況下會(huì)從那個(gè)NuGet 包中獲取自己需要的信息。
現(xiàn)在,發(fā)布后的文件夾是如此簡(jiǎn)潔: 大小 4.3M
再貼個(gè)以前的 發(fā)布后的文件夾你們感受一下: 大小 16.5M
有些同學(xué)可能好奇他們把那些引用的 MVC 包放到哪里了,默認(rèn)情況下他們位于這個(gè)目錄:
C:\Program Files\dotnet\store\x64\netcoreapp2.0
新的 Program.cs 和 Startup.cs
現(xiàn)在,當(dāng)創(chuàng)建一個(gè) ASP.NET Core 2.0 MVC 程序的時(shí)候,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<Startup>() .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)變得很簡(jiǎn)單了,少了很多比如 appsetting.json 文件的添加,日志中間件, Kertrel , HostingEnvironment 等,那么是怎么回事呢? 其他他們已經(jīng)被集成到了 WebHost.CreateDefaultBuilder這個(gè)函數(shù)中,那么我們跟進(jìn)源碼來(lái)看一下內(nèi)部是怎么做的。
WebHost.CreateDefaultBuilder
下面是 WebHost.CreateDefaultBuilder 這個(gè)函數(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<IConfigureOptions<KestrelServerOptions>, KestrelServerOptionsSetup>(); }); return builder; }
可看到,新的方式已經(jīng)隱藏了很多細(xì)節(jié),幫助我們完成了大部分的配置工作。但是你知道怎么樣來(lái)自定義這些中間件或者配置也是必要的技能之一。
appsettings.json 的變化
在 appsettings.json 中,我們可以定義 Kestrel 相關(guān)的配置,應(yīng)用程序會(huì)在啟動(dòng)的時(shí)候使用該配置進(jìn)行Kerstrel的啟動(dòng)。
{ "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 啟動(dòng)的時(shí)候使用的本地地址和端口,以及在生產(chǎn)環(huán)境需要使用的 HTTPS 的配置項(xiàng),通常情況下關(guān)于 HTTPS 的節(jié)點(diǎn)配置部分應(yīng)該位于 appsettings.Production.json 文件中。
現(xiàn)在,dotnet run在啟動(dòng)的時(shí)候?qū)⑼瑫r(shí)監(jiān)聽(tīng) 9000, 和 9001 端口。
日志的變化
在 ASP.NET Core 2.0 中關(guān)于日志的變化是非常令人欣慰的,因?yàn)樗F(xiàn)在不是作為MVC中間件配置的一部分了,而是 Host 的一部分,這句話好像有點(diǎn)別扭,囧~。 這意味著你可以記錄到更加底層產(chǎn)生的一些錯(cuò)誤信息了。
現(xiàn)在你可以這樣來(lái)擴(kuò)展日志配置。
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .ConfigureLogging(factory=>{你的配置}) .Build();
全新的 Razor Pages
ASP.NET Core 2.0 引入的另外一個(gè)令人興奮的特性就是 Razor Pages。提供了另外一種方式可以讓你在做Web 頁(yè)面開(kāi)發(fā)的時(shí)候更加的沉浸式編程,或者叫 page-focused 。額...它有點(diǎn)像以前 Web Form Page,它隸屬于 MVC 框架的一部分,但是他們沒(méi)有 Controller。
你可以通過(guò)dotnet new razor命令來(lái)新建一個(gè) Razor Pages 類型的應(yīng)用程序。
Razor Pages 的 cshtml 頁(yè)面代碼可能看起來(lái)是這樣的:
@page @{ var message = "Hello, World!"; } <html> <body> <p>@message</p> </body> </html>
Razor Pages 的頁(yè)面必須具有 @page標(biāo)記。他們可能還會(huì)有一個(gè) *.cshtml.cs的 class 文件,對(duì)應(yīng)的頁(yè)面相關(guān)的一些代碼,是不是很像 Web Form 呢?
有同學(xué)可能會(huì)問(wèn)了,沒(méi)有 Controller 是怎么路由的呢? 實(shí)際上,他們是通過(guò)文件夾物理路徑的方式進(jìn)行導(dǎo)航,比如:
有關(guān) Razor Pages的更多信息可以看這里:
docs.microsoft.com/en-us/aspnet/core/razor-pages
總結(jié)
可以看到,在 ASP.NET Core 2.0 中,給我們的開(kāi)發(fā)過(guò)程帶來(lái)了很多便利和幫助,他們包括 Program 等的改進(jìn),包括 MVC 相關(guān) NuGet 包的集成,包括appsetting.json的服務(wù)器配置,以及令人驚訝的Razor Page,是不是已經(jīng)迫不及待的期待正式版的發(fā)布呢?如果你期待的話,點(diǎn)個(gè)【推薦】讓我知道吧~ 2333..
如果你對(duì) ASP.NET Core 有興趣的話可以關(guān)注我,我會(huì)定期的在博客分享我的學(xué)習(xí)心得。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。
文章題目:ASP.NETCore2.0版本的有什么新特性
轉(zhuǎn)載注明:http://aaarwkj.com/article0/gdepoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、外貿(mào)建站、網(wǎng)站營(yíng)銷、定制開(kāi)發(fā)、小程序開(kāi)發(fā)、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)