.NET Core 3.0将会在 .NET Conf 大会上正式发布,截止今日发布了9个预览版,改动也是很多,因为没有持续关注,今天将前面开源的动态WebApi项目迁移到.NET Core 3.0还花了很多时间踩坑,给你们分享一下我在迁移过程当中遇到的坑。迁移的版本是当前Release最新版本 .NET Core 2.2 到 .NET Core 3.0 Preview 9。html
官方迁移文档:从 ASP.NET Core 2.2 迁移到3.0 ,这个官方文档比较详细,可是有一些东西里面并无写。git
将 TargetFramework 版本改成 netcoreapp3.0
github
移除下图 Nuget 包web
将其他 Nuget 包更新到支持 .NET Core 3.0 版本shell
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>(); }); }
ConfigureServices 方法:app
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
改成 services.AddControllers()
(WebApi) / services.AddControllersWithViews();
(MVC)Configure 方法:框架
该方法里获取Host环境信息接口类型,IHostingEnvironment
改成 IWebHostEnvironment
visual-studio
app.UseMVc
改成:ui
WebApi:spa
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();
由于 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
移除 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。
原文出处:https://www.cnblogs.com/stulzq/p/11497624.html