0

0

详解ASP.NET Core 2.0 版本的新特性

零下一度

零下一度

发布时间:2018-05-24 13:55:17

|

6513人浏览过

|

来源于php中文网

原创

amazing 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 来快速了解。

.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 相关包

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

宠物商店
宠物商店

目前,PetShop已经从最初的2.0、3.0等版本,发展到了最新的4.0版本。PetShop 4.0使用ASP.NET 2.0技术开发,其中加入了众多新增特性,因此,在性能、代码数量、可扩展性等方面有了重大改善。可以说,学习PetShop 4.0是深入掌握ASP.NET 2.0技术的捷径。本节将引领读者逐步了解PetShop 4.0的方方面面,包括应用程序安装、功能和用户界面简介、解决方案和体系

下载

现在,当创建一个 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()
 .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, 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()
 .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!";
}



 

@message

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提高程序性能的实现代码

5. Core实现全面扫盲贴的ASP方法详解

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
asp开发工具有哪些
asp开发工具有哪些

asp开发工具有Visual Studio、Dreamweaver、FrontPage、EditPlus、UltraEdit、SQL Server Management Studio、RAD Studio、Delphi、Asp.NET和Oracle SQL Developer。更多asp开发工具相关内容,详情请阅读本专题下面的其他文章,php中文网欢迎大家前来学习。

362

2023.10.23

什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

178

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

214

2025.12.18

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

418

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

535

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

311

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

469

2024.01.03

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

6

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ASP.NET参考手册
ASP.NET参考手册

共0课时 | 0人学习

传播智客ASP.NET中级系列视频教程
传播智客ASP.NET中级系列视频教程

共33课时 | 6.4万人学习

传播智客ASP.NET高级系列视频教程
传播智客ASP.NET高级系列视频教程

共34课时 | 6.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号