ASP.NET Core 3.0 迁移避坑指南

  • A+
所属分类:.NetCore

ASP.NET Core 3.0 迁移避坑指南

一.ASP.NET Core 项目迁移

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

1.更改框架版本

  • 将 TargetFramework 版本改为 netcoreapp3.0
  • ASP.NET Core 3.0 迁移避坑指南

    2.移除Nuget包

  • 移除下图 Nuget 包
  • ASP.NET Core 3.0 迁移避坑指南

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

    1. public class Program  
    2. {  
    3.     public static void Main(string[] args)  
    4.     {  
    5.         CreateHostBuilder(args).Build().Run();  
    6.     }  
    7.   
    8.     public static IHostBuilder CreateHostBuilder(string[] args) =>  
    9.         Host.CreateDefaultBuilder(args)  
    10.             .ConfigureWebHostDefaults(webBuilder =>  
    11.             {  
    12.                 webBuilder.UseStartup<Startup>();  
    13.             });  
    14. }  

    ASP.NET Core 3.0 迁移避坑指南

    4.Startup更改

  • ConfigureServices 方法:
  • 修改services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
  • 【WebApi】services.AddControllers()
  • 【MVC】services.AddControllersWithViews();
  • ASP.NET Core 3.0 迁移避坑指南

  • Configure 方法:
  • 该方法里获取Host环境信息接口类型,IHostingEnvironment改为 IWebHostEnvironment
  • ASP.NET Core 3.0 迁移避坑指南

  • app.UseMVc 改为:
  • WebApi:
    1. app.UseRouting();  
    2.   
    3. app.UseAuthorization();  
    4.   
    5. app.UseEndpoints(endpoints =>  
    6. {  
    7.     endpoints.MapControllers();  
    8. });  
  • MVC:
    1. app.UseRouting();  
    2.   
    3. app.UseAuthorization();  
    4.   
    5. app.UseEndpoints(endpoints =>  
    6. {  
    7.     endpoints.MapControllerRoute(  
    8.         name: "default",  
    9.         pattern: "{controller=Home}/{action=Index}/{id?}");  
    10. });  
  • 关于Json组件
  • ASP.NET Core 3.0 默认移除了 Newtonsoft.Json ,使用了微软自己实现的 System.Text.Json,如果要改为 Newtonsoft.Json ,那么有以下两步:

  • 1.安装Nuget包:
    1. Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson  
  • 2.注册
    1. 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

    ASP.NET Core 3.0 迁移避坑指南

    1.更改框架版本

    ASP.NET Core 3.0 迁移避坑指南

    2.更新Nuget包

  • 移除 Microsoft.AspNetCore.* 不具有 .NET Core 3.0 的版本,例如:
  • ASP.NET Core 3.0 迁移避坑指南

  • 添加 FrameworkReference(不是 PackageReference) 引用:
  • ASP.NET Core 3.0 迁移避坑指南

    三.结束

    题外话: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。

    钰玺

    发表评论

    :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: