一.前言

.NET Core 3.0将会在 .NET Conf 大会上正式发布,截止今日发布了9个预览版,改动也是不少,由于没有持续关注,今天将前面开源的动态WebApi项目迁移到.NET Core 3.0还花了不少时间踩坑,给大家分享一下我在迁移过程中遇到的坑。迁移的版本是当前Release最新版本 .NET Core 2.2 到 .NET Core 3.0 Preview 9。

二.ASP.NET Core 项目迁移

官方迁移文档:从 ASP.NET Core 2.2 迁移到3.0 ,这个官方文档比较详细,但是有一些东西里面并没有写。

1.更改框架版本

将 TargetFramework 版本改为 netcoreapp3.0

2.移除Nuget包

移除下图 Nuget 包

将其余 Nuget 包更新到支持 .NET Core 3.0 版本

3.Program更改

    public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
} public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}

4.Startup更改

ConfigureServices 方法:

  1. services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); 改为 services.AddControllers()(WebApi) / services.AddControllersWithViews();(MVC)

Configure 方法:

  1. 该方法里获取Host环境信息接口类型,IHostingEnvironment改为 IWebHostEnvironment

  2. app.UseMVc 改为:

WebApi:

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});

MVC:

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});

关于Json组件

ASP.NET Core 3.0 默认移除了 Newtonsoft.Json ,使用了微软自己实现的 System.Text.Json,如果要改为 Newtonsoft.Json ,那么有以下两步:

1.安装Nuget包:

Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson

2.注册

services.AddControllers().AddNewtonsoftJson();

三.类库(Class Library Net Standard 2.0)项目迁移

因为 ASP.NET Core 3.0 对元包机制的改动,现在不能通过nuget安装 Microsoft.AspNetCore.All 或者 Microsoft.AspNetCore.App 3.0版本,以及他们包含的大多数Nuget包也不能通过nuget安装了(没有3.0对应的版本)。如果说还引用2.2版本的nuget包,那么运行起来可能会出错。元包被包含在了 .NET Core SDK中,这意味着如果我们的类库项目依赖了 AspNetCore 相关组件,那么将没法继续将项目目标框架设置为 .NET Standard 了,只能设置为.NET Core 3.0,因为 **ASP.NET Core 3.0 only run on .NET Core **。

元包机制改动原因:https://github.com/aspnet/AspNetCore/issues/3608

1.更改框架版本

2.更新Nuget包

移除 Microsoft.AspNetCore.* 不具有 .NET Core 3.0 的版本,例如:

添加 FrameworkReference(不是 PackageReference) 引用:

三.结束

题外话:ASP.NET Core 直到2.2 是可以同时运行在 .NET Framework 和 .NET Core 中,但是从 ASP.NET Core 3.0 开始,将会只支持 .NET Core。

相关资料:A first look at changes coming in ASP.NET Core 3.0

上面说的改动,微软官方都有解释原因,其实是为了变得更好而改动,弥补以前的缺点,只不过对于用了这么久的Core来说有点折腾,但是还是能接受,为了更好的 .NET Core。

ASP.NET Core 3.0 迁移避坑指南的更多相关文章

  1. 记一次Docker中部署Asp.Net Core 3.0的踩坑过程

    最近公司打算重构目前直销报单系统到微信小程序中,目前的系统只能在PC上面使用,这两年也搞过App端,但是由于人员流动和公司架构调整最后都不了了之,只留下一堆写了一半的接口.以前的接口依然是使用Asp. ...

  2. ASP.NET Core 2.2 迁移至 3.0 备忘录

    将 ASP.NET Core 2.2 迁移至 ASP.NET Core 3.0 需要注意的地方记录在这篇随笔中. TargetFramework 改为 netcoreapp3.0 <Target ...

  3. ASP.NET CORE 2.0 不小心踩得坑

    前言 我是跟着 https://github.com/FQLin/Docs 学习asp.net core 2.0 的 1.EF迁移 EF 的迁移方式有两种: Command-line interfac ...

  4. 一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

    不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.superviso ...

  5. 为什么你需要将代码迁移到ASP.NET Core 2.0?

    随着 .NET Core 2.0 的发布,.NET 开源跨平台迎来了新的时代.开发者们可以选择使用命令行.个人喜好的文本编辑器.Visual Studio 2017 15.3 和 Visual Stu ...

  6. Asp.Net Core 2.0 项目实战(5)Memcached踩坑,基于EnyimMemcachedCore整理MemcachedHelper帮助类。

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  7. Asp.net Core 2.0+EntityFrameWorkCore 2.0添加数据迁移

    Asp.net Core 由于依赖注入的广泛使用,配置数据迁移,与Asp.net大不相同,本篇介绍一下Asp.net Core添加数据迁移的过程 添加Nuget包 Install-Package Mi ...

  8. ASP.NET Core 3.0 WebApi 系列【2】.Net Core 3.0+ CodeFirst + MySql 实现数据的迁移

    写在前面 在前一小节中,我们创建了基于RESFULL风格的服务.这个小节,尝试使用CodeFirst+MySql 的方式实现数据迁移. 一.开发环境 [1]运行环境:win10 家庭版 [2]开发工具 ...

  9. 从 ASP.NET Core 3.1 迁移到 5.0

    3月中旬,微软官方已经发布了dotnet 5的第一个预览版:5.0.0-preview.1. dotnet core经过前几个版本的发展和沉淀,到3.1已经基本趋于稳定. 所以从.net core 3 ...

随机推荐

  1. [Short-Circuit Constraint Violation]警告解决办法

    今天用Altium Designer16画PCB时候遇到一个问题,进行DRC检测,警告如下: [Short-Circuit Constraint Violation] GrayscaleSensor1 ...

  2. Ubuntu 16.04 硬盘安装

    自己的宏碁4741G 笔记本,已经用了6年了,最近感觉越来越慢,晚上突然想起装个Linux 玩玩,说干就干,选择了用户比较多的Ubuntu,网上下载16.04的版本,结合网上搜索到的安装教程,看似简单 ...

  3. Java连载16-++传参&关系运算符

    一.++再举例 int a = 10; System.out.print(a++);//这里会打印出10,因为他们内部这个print函数有参数相当于参数x=a++ System.out.println ...

  4. 7.18 collection time random os sys 序列化 subprocess 等模块

    collection模块 namedtuple 具名元组(重要) 应用场景1 # 具名元组 # 想表示坐标点x为1 y为2 z为5的坐标 from collections import namedtu ...

  5. 我的第一个CAD程序

    [步骤1]新建项目 启动Visual Studio 2010,然后选择一个C#类库,设置好名称和保存位置,点击[确定] [步骤2]添加引用文件AcMgd.dll和AcDbMgd.dll 首次使用时,[ ...

  6. ubuntu下部署mongodb以及设置允许远程连接

    最近因为项目原因需要在阿里云服务器上部署mongodb,网上查阅了一些资料,特此记录一下步骤 1.运行apt-get install mongodb命令安装mongodb服务(如果提示找不到该pack ...

  7. 《大牛到底是如何阅读JDK源码的?》一起来学习一下

    前言: 如何阅读源码,是每个程序员需要面临的一项挑战,为什么需要阅读源码?从实用性的角度来看,主要有三个目的: 第一,解决手头的新问题或者新需求; 第二,真正理解一部分理论的落地实现; 第三,应对面试 ...

  8. ubuntu16.04安装Ros(kinetic版本)【亲测好用】

    准备 1.ubuntu16.04 64位桌面版 ps:关于系统的下载和安装这里不做介绍,请自行百度,不是介绍重点 2.更改源 图上的几个勾默认是选上的,如果没有选上,选成上图这样(如果修改过勾,点击关 ...

  9. 【CSS】Houdini, CSS的成人礼

    前情提要 CSS:老板,你看ES9,ES10都出来了,您看我的事情什么时候... W3C: 这不是正在走着流程嘛!小C你不要心急! W3C:(语重心长)你看啊,我们先(1)提个开发提案章程, 然后再批 ...

  10. tomcat启动nio,apr详解以及配置

    tomcat启动nio,apr详解以及配置 前言 在正文开始之前,我们先在idea工具中看看启动的信息,顺便看下启动的基本信息 在这里插入图片描述可以看到信息有tomcat版本操作系统版本java版本 ...