本文结构

  • 先决条件

  • 升级目标框架(Target Framework)的版本

  • 过时的IHostingEnvironment与IApplicationLifetime对象

  • Endpoint Routing与AddMvc中间件

  • Swashbuckle.AspNetCore

  • 总结

手头有个ASP.NET Core 2.0的项目,打算将里面的依赖包进行一个版本升级,鉴于该项目还是一年前开发的,使用的是.NET Core 2.0的版本,这次正好借着.NET Core 3.0在上个月刚刚发布的机会,干脆一起将该项目所使用的.NET Core版本从2.0升级到3.0,但这过程也并不是鼠标点点就能平滑完成的,因此,撰文一篇,简要介绍一下升级的几个关键点。由于不同的项目所依赖的第三方NuGet包并不相同,所以我只介绍我手上这个项目的升级过程,有些第三方的NuGet包或许还没有支持.NET Core 3.0的版本,这就需要到这些依赖项的官方主页或者Github项目上寻找解决方案了。

先决条件

.NET Core 3.0 SDK和Visual Studio 2019 16.3.0以上版本

升级目标框架(Target Framework)的版本

第一步非常简单,就是在项目上点击鼠标右键,选择Properties,在打开的项目属性页中,将Target framework从.NET Core 2.0改为.NET Core 3.0:

经过这一步操作,我们已经将项目的Target Framework由netcoreapp2.0改为netcoreapp3.0:

然后,不出意外地发现,在解决方案资源管理器中,所有的外部依赖都出现了黄色小叹号:

编译输出窗口也显示错误信息,告知Microsoft.AspNetCore.All这个依赖包无法支持.NET Core 3.0以及更高版本。在NuGet Package Manager中搜索,发现Microsoft.AspNetCore.All这个依赖包的确没有3.0的版本:

其实,从.NET Core 3.0开始,所有以“Microsoft.AspNetCore“作为命名开头的库,不再提供单独的NuGet包,这些包所包含的库文件(DLL)已经全都包含在Microsoft.AspNetCore.App这一公共框架中,而Microsoft.NET.Sdk.Web SDK已经隐式地引用了Microsoft.AspNetCore.App,因此,我们只需要编辑csproj文件,将多余的Microsoft.AspNetCore.XXXX的项目引用删掉即可(因为项目的SDK已经设置为了Microsoft.NET.Sdk.Web)。删掉多余的引用之后,保存项目文件,所有黄色小叹号消失,项目可以正常编译。

过时的IHostingEnvironment与IApplicationLifetime对象

从.NET Core 3.0开始,IHostingEnvironment与IApplicationLifetime已被标记为“过时(Obsolete)”,这意味着在后续的.NET版本中,将不再继续支持这两个接口。如果我们在Startup的Configure方法中使用了这两个对象,那么最好也将这两个接口分别替换为:IWebHostEnvironment和IHostApplicationLifetime。

Endpoint Routing与AddMvc中间件

ASP.NET Core 3.0默认使用Endpoint Routing,而启用了Endpoint Routing后,AddMvc中间件就不被支持了。因此,当一个ASP.NET Core项目从2.x升级到3.0的时候,原有的“app.AddMvc()”方法调用就会出现一个警告,即使忽略这个警告强行执行程序,也会得到一个异常:

根据提示,可以用以下代码来禁用Endpoint Routing,以便继续使用app.AddMvc()的方式:

1
services.AddMvc(options => options.EnableEndpointRouting = false);

也可以使用下面的代码来替换AddMvc的调用:

1
2
3
4
5
6
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});

Swashbuckle.AspNetCore

如果Web API项目使用了Swashbuckle提供的Swagger,建议升级到5.0.0-rc4,虽然是预览版本,但是对于.NET Core 3.0的支持是挺好的。其中有两个变化,第一个是在配置Swagger服务的时候,原来使用的是Swagger的Info类,现在改用Microsoft Open API的OpenApiInfo类;第二个就是需要显式添加Microsoft.Extensions.PlatformAbstractions包引用。

总结

在进行了以上这些部分的调整之后,我们的项目就可以正常运行在.NET Core 3.0上了:

总的来说,ASP.NET Core的版本升级还是非常简单容易的,有些细节方面有可能还是需要进一步的调整,就要根据项目本身的需要而定了。

ASP.NET Core 2.0 Web API项目升级到ASP.NET Core 3.0概要笔记相关推荐

  1. 从头编写 asp.net core 2.0 web api 基础框架 (2)

    上一篇是: 从头编写 asp.net core 2.0 web api 基础框架 (1) Github源码地址是: https://github.com/solenovex/Building-asp. ...

  2. 【转载】从头编写 asp.net core 2.0 web api 基础框架 (1)

    工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相 ...

  3. ASP.NET Core 5.0 Web API 自动集成Swashbuckle

    ASP.NET Core 5.0 Web API与开放源代码项目 Swashbuckle.AspNetCore 的维护人员合作,ASP.NET Core API 模板包含对 Swashbuckle 的 ...

  4. 从头编写 asp.net core 2.0 web api 基础框架 (1)

    工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相 ...

  5. asp.net core 2.0 web api基于JWT自定义策略授权

    JWT(json web token)是一种基于json的身份验证机制,流程如下: 通过登录,来获取Token,再在之后每次请求的Header中追加Authorization为Token的凭据,服务端 ...

  6. asp.net core 2.0 web api + Identity Server 4 + angular 5 可运行前后台源码

    前台使用angular 5, 后台是asp.net core 2.0 web api + identity server 4. 从头编写asp.net core 2.0 web api 基础框架: 第 ...

  7. ASP.NET Core 3.1 Web API和EF Core 5.0 中具有泛型存储库和UoW模式的域驱动设计实现方法

    目录 介绍 背景 领域驱动设计 存储库模式 工作单元模式 使用代码 创建空白解决方案和解决方案架构 添加和实现应用程序共享内核库 PageParam.cs 在Entity Framework Core ...

  8. core webapi缩略图_在ASP.NET Core Web API 项目里无法访问(wwwroot)下的文件

    新建 ASP.NET Core Web API 项目 -- RESTFul 风格 Hello World! 一.创建一个空项目 请查看 新建 .NET Core 项目 -- Hello World!  ...

  9. 我如何启动任何.NET Core Web API项目

    目录 介绍 步骤 在Visual Studio中创建Web API项目 选项1 选项 2 IIS配置 配置Swashbuckle/Swagger 添加Swashbuckle 添加Newtonsoft. ...

最新文章

  1. pythonpandas函数详解_对pandas中Series的map函数详解
  2. Linux python impala/sasl/thrift-sasl command not found
  3. 树莓派3B创建WiFi热点
  4. java中读取文件的方法
  5. 【Java学习笔记八】包装类和vector
  6. 节省50%部署时间的5大KS8服务
  7. Python统计一个字符串中所有字符在另一个字符串出现的总次数
  8. Renting Boats
  9. 详解CSS中:nth-child的用法
  10. 【毕设教程】如何使用单片机控制步进电机
  11. 【Proteus仿真】 51单片机利用定时器制作简易SPWM波形输出
  12. python全栈工程师待遇如何_python全栈工程师工作待遇
  13. 删除字符串数组中的空字符串
  14. 世界陶瓷卫浴100强榜单发布!
  15. 《认知与设计——理解UI设计准则》系列笔记目录
  16. 手机上的APP都是用什么编程语言写的?
  17. 书法文化类毕业论文文献都有哪些?
  18. 基于软路由连接上网的相关配置
  19. 网站蜘蛛日志如何分析?对优化有用吗?
  20. 地推项目大全_地推吧:app线上推广渠道大全(软件app上新地推)

热门文章

  1. Linux PCI 设备驱动基本框架(一)
  2. 【Android】RxJava的使用(四)线程控制 —— Scheduler
  3. MATLAB编程与应用系列-关于MATLAB编程入门教程的总体编写安排
  4. web第6次作业position
  5. 接口文档神器Swagger(下篇)
  6. Jenkins修改管理员密码.
  7. Briefly unavailable for scheduled maintenance message after doing automatic upgrade
  8. 关于F5 排错的简单介绍之一
  9. Composer快速入门
  10. IBM-X3650 6核处理器安装sql server 2005报错解决方法