ASP.NET Core 3.0迁移的完美避坑指南
一.前言
.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。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。