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

本文结构

  • 先决条件

  • 升级目标框架(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:

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

其实,从.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()”方法调用就会出现一个警告,即使忽略这个警告强行执行程序,也会得到一个异常:

640?wx_fmt=png

根据提示,可以用以下代码来禁用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上了:

640?wx_fmt=png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见消息队列对比

一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,Rabbit…

Precision-Recall Curve

原文出自:http://blog.csdn.net/pirage/article/details/9851339 最近一直在做相关推荐方面的研究与应用工作,召回率与准确率这两个概念偶尔会遇到, 知道意思,但是有时候要很清晰地向同学介绍则有点转不过弯来。 召回率和准确率是…

2019 中国.NET 开发者峰会正式启动

2014年微软组织并成立.NET基金会,微软在成为主要的开源参与者的道路上又前进了一步。2014年以来已经有众多知名公司加入.NET基金会,Google,微软,AWS三大云厂商已经齐聚.NET基金会,在平台项目中,.NET平台上有…

聊一聊顺序消息(RocketMQ顺序消息的实现机制)

本文来自:https://www.cnblogs.com/hzmark/p/orderly_message.html 当我们说顺序时,我们在说什么? 日常思维中,顺序大部分情况会和时间关联起来,即时间的先后表示事件的顺序关系。 比如事件A发生在下午3点一刻&#…

如何摆脱「技术思维」的惯性?

大家好,我是Z哥。虽然从标题上看,这篇文章是写给“技术人”的,但从广义上来说,只要你是一位以理性见长的人,那么这篇文章要讲的东西可能会与你有关。先问大家一个问题。如果你现在打算做一件事A,它的目的是…

RocketMq重试及消息不丢失机制

1、消息重试机制 由于MQ经常处于复杂的分布式系统中,考虑网络波动、服务宕机、程序异常因素,很有可能出现消息发送或者消费失败的问题。因此,消息的重试就是所有MQ中间件必须考虑到的一个关键点。如果没有消息重试,就可能产生消息…

cmake编译opencv3.0

本文参照了 http://www.huqiwen.com/2012/11/27/compile-opencv-243-in-visual-studio-2012/ 安装CMake 从CMake的官方网站下载最新版的CMake。http://www.cmake.org/cmake/resources/software.html,选择Windows (Win32 Installer)平台的进行下载。 安装时请勾选…

【 .NET Core 3.0 】框架之五 || JWT权限验证

前言关于JWT一共三篇 姊妹篇,内容分别从简单到复杂,一定要多看多想:一、Swagger的使用 3.3 JWT权限验证【修改】二、解决JWT权限验证过期问题三、JWT完美实现权限与接口的动态分配这里一共三个文章,目前是第一篇,剩下两…

OpenCV Stitching 工程搭建

转自http://www.tuicool.com/articles/fMbUfaF Opencv中提供Stitcher类,实现了多图像自动拼接,Opencv是开源的,程序实现的源代码都在Opencv安装文件中,以及Opencv提供的函数查询手册和Opencv教程都可以在…

asp.net core 3.0 更新简记

asp.net core 3.0 更新简记Intro最近把活动室预约项目从 asp.net core 2.2 更新到了 asp.net core 3.0,记录一下,升级踩过的坑以及经验总结,包括但不限于TargetFramework ( netcoreapp2.2 需要更新为 netcoreapp3.0)DependencyHost/Environme…

kafka吞吐量高的原因

kafa 吞吐量高的原因 1、顺序读写 kafka的消息是不断追加到文件中的,这个特性使kafka可以充分利用磁盘的顺序读写性能 顺序读写不需要硬盘磁头的寻道时间,只需很少的扇区旋转时间,所以速度远快于随机读写 2、零拷贝 在Linux kernel2.2 之…

【 .NET Core 3.0 】框架之三 || swagger的使用

一、为什么使用Swagger上文中已经说到,单纯的项目接口在前后端开发人员使用是特别不舒服的,那所有要推荐一个,既方便又美观的接口文档说明框架,当当当,就是Swagger,随着互联网技术的发展,现在的…

MQ问题集(kafka主从同步与高可用,MQ重复消费、幂等)

1、kafka主从同步与高可用 https://1028826685.iteye.com/blog/2354570 http://developer.51cto.com/art/201808/581538.htm 2、MQ有可能发生重复消费,如何避免,如何做到幂等 2.1 MQ消息发送 1、发送端MQ-client(消息生产者:Producer)将消…

微软编程题:寻找最小的k个值

转载自:http://blog.csdn.net/v_JULY_v/article/details/6370650 寻找最小的k个数 题目描述:5.查找最小的k个元素 题目:输入n个整数,输出其中最小的k个。 例如输入1,2,3,4,5&#xf…

Bumblebee微服务网关之访问日志处理

记录访问日志可以起到非常重要的作用,它不仅记录了API的使用情况,更可以反映API各种相关数据;通过分析日志可以得到API不同时间的负载情况,访问效率和流量分布,更进一步还能分析出用户的操作历史和行为这是非常有价值的…

负载均衡基础

1、什么是负载均衡(Load balancing) 在网站创立初期,我们一般都使用单台机器对台提供集中式服务,但是随着业务量越来越大,无论是性能上还是稳定性上都有了更大的挑战。这时候我们就会想到通过扩容的方式来提供更好的服…

Bumblebee微服务网关之并发限制

对于服务应用来说支持的并发越高越好,但很多时候资源有限,超负载的并发则会给整体应用带来更大的危险性(更何况有些并发来源是恶意的)。作为微服务网关应该具有一定的挡洪作用,这样可以一定程度保障后台逻辑服务的稳定…

[ASP.NET Core 3框架揭秘] 跨平台开发体验: Mac OS

除了微软自家的Windows平台, .NET Core针对Mac OS以及各种Linux Distribution(RHEL、Ubuntu、Debian、Fedora、CentOS和SUSE等)都提供了很好的支持。我们先来体验一下使用Mac来开发.NET Core应用,在这之前我们照例先得在Mac OS上构…

接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示…

使用RabbitMQ实现接口补偿

业务背景在我们的日常开发中,经常需要调用第三方接口来进行数据传递,在调用接口的过程中,会因为各种原因导致调用的失败。这时我们希望能有一种机制实现对失败的接口的重复调用,并且能够实现人工干预。实现思路1、当接口调用失败&…