当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET Core 3.0迁移的完美避坑指南

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

2020年03月09日  | 移动技术网IT编程  | 我要评论

硫化喷委撒纳剂,丁灿扮演者,爱伦坡的丽姬亚

一.前言

.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 方法:

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。

总结

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网