欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET Core 3.0迁移的完美避坑指南

程序员文章站 2022-09-04 13:28:55
一.前言 .net core 3.0将会在 .net conf 大会上正式发布,截止今日发布了9个预览版,改动也是不少,由于没有持续关注,今天将前面开源的动态webapi项目迁移到....

一.前言

.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

ASP.NET Core 3.0迁移的完美避坑指南

2.移除nuget包

移除所有 nuget包

ASP.NET Core 3.0迁移的完美避坑指南

将其余 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>();
    });
 }

ASP.NET Core 3.0迁移的完美避坑指南

4.startup更改

configureservices 方法:

services.addmvc().setcompatibilityversion(compatibilityversion.version_2_2); 改为 services.addcontrollers()(webapi) / services.addcontrollerswithviews();(mvc)

ASP.NET Core 3.0迁移的完美避坑指南

configure 方法:

1、该方法里获取host环境信息接口类型,ihostingenvironment改为 iwebhostenvironment

ASP.NET Core 3.0迁移的完美避坑指南

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

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。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。