查看原文
其他

ASP.NET Core 3.0 迁移避坑指南

DotNet 2021-09-23

(给DotNet加星标,提升.Net技能


转自:晓晨Master
cnblogs.com/stulzq/p/11497624.html

一、前言


.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:https://docs.microsoft.com/zh-cn/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio


这个官方文档比较详细,但是有一些东西里面并没有写。


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。


推荐阅读

(点击标题可跳转阅读)

.NET Core 3.0及ASP.NET Core 3.0前瞻

.NET Core 3.0 Preview 9 发布

.NET项目迁移到.NET Core操作指南


看完本文有收获?请转发分享给更多人

关注「DotNet」加星标,提升.Net技能 

好文章,我在看❤️

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存