媒介
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 来疾速相识。
.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 包,不须要你再次举行 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 中,当建立一个 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 相干包
<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 Files\dotnet\store\x64\netcoreapp2.0
新的 Program.cs 和 Startup.cs
如今,当建立一个 ASP.NET Core 2.0 MVC 顺序的时刻,Program 和 Startup 已发生了变化,他们已变成了如许:
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?}"); }); } }
能够发明,新的 Program.cs 中和 Startup.cs 中的内容已变得很简单了,少了许多比方 appsetting.json 文件的增加,日记中间件, Kertrel , HostingEnvironment 等,那末是怎样回事呢? 其他他们已被集成到了 WebHost.CreateDefaultBuilder 这个函数中,那末我们跟进源码来看一下内部是怎样做的。
WebHost.CreateDefaultBuilder
下面是 WebHost.CreateDefaultBuilder 这个函数的源码:
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; }
可看到,新的体式格局已隐蔽了许多细节,协助我们完成了大部份的设置事情。然则你晓得怎样来自定义这些中间件或许设置也是必要的妙技之一。
appsettings.json 的变化
在 appsettings.json 中,我们能够定义 Kestrel 相干的设置,应用顺序会在启动的时刻运用该设置举行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" } } }
以上设置内容设置了 Kertrel 启动的时刻运用的当地地点和端口,以及在生产环境须要运用的 HTTPS 的设置项,通常情况下关于 HTTPS 的节点设置部份应当位于 appsettings.Production.json 文件中。
如今,dotnet run在启动的时刻将同时监听 9000, 和 9001 端口。
日记的变化
在 ASP.NET Core 2.0 中关于日记的变化是异常使人欣慰的,由于它如今不是作为MVC中间件设置的一部份了,而是 Host 的一部份,这句话彷佛有点别扭,囧~。 这意味着你能够记录到越发底层发生的一些错误信息了。
如今你能够如许来扩大日记设置。
public static IWebHost 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 页面代码能够看起来是如许的:
@page @{ var message = "Hello, World!"; } <html> <body> <p>@message</p> </body> </html>
Razor Pages 的页面必需具有 @page 标记。他们能够还会有一个 *.cshtml.cs 的 class 文件,对应的页面相干的一些代码,是否是很像 Web Form 呢?
有同砚能够会问了,没有 Controller 是怎样路由的呢? 实际上,他们是经由历程文件夹物理途径的体式格局举行导航,比方:
有关 Razor Pages的更多信息能够看这里:
docs.microsoft.com/en-us/aspnet/core/razor-pages
总结
能够看到,在 ASP.NET Core 2.0 中,给我们的开辟历程带来了许多方便和协助,他们包含 Program 等的革新,包含 MVC 相干 NuGet 包的集成,包含appsetting.json的服务器设置,以及使人惊奇的Razor Page,是否是已如饥似渴的期待正式版的宣布呢?假如你期待的话,点个【引荐】让我晓得吧~ 2333..
假如你对 ASP.NET Core 有兴致的话能够关注我,我会按期的在博客分享我的进修心得。
【相干引荐】
1. ASP.NET免费视频教程
2. 细致引见ASP.NET MVC--路由
3. 分享ASP.NET Core在开辟环境中保留秘要(User Secrets)的实例
4. .Net Core中怎样运用ref和Span<T>进步顺序机能的完成代码
5. Core完成周全扫盲贴的ASP要领详解
以上就是详解ASP.NET Core 2.0 版本的新特征的细致内容,更多请关注ki4网别的相干文章!