.Net Core 3.1迁移整理
概述
.NET Core 3.1 中最重要的特性为,它是长期支持 (LTS) 版本。未来三年包含来自 Microsoft 的支持的 LTS 版本。
作为一个大版本更新,.NET Core 3.0以后引入了大量改进和新特性,新增加了 Windows Forms 和 WPF、新的 JSON API、对 ARM64 架构的支持,以及全面提升的性能。
如果使用的是 Visual Studio 2019,则必须更新到 Visual Studio 2019 版本 16.4 或更高版本才能使用 .NET Core 3.1 项目。 有关 Visual Studio 版本 16.4 中新增功能的详细信息,请参阅 Visual Studio 2019 版本 16.4 中的新增功能。
Visual Studio for Mac 也支持 .NET Core 3.1,并且 Visual Studio for Mac 8.4 中就包括 .NET Core 3.1。
框架/工具
下载地址:https://dotnet.microsoft.com/download/dotnet-core/3.1
Visual Studio support
Visual Studio 2019 (v16.4)以上
Included in
Visual Studio 16.4.0
Included runtimes
.NET Core Runtime 3.1.0
ASP.NET Core Runtime 3.1.0
Desktop Runtime 3.1.0
Language support
C# 8.0 https://devblogs.microsoft.com/dotnet/building-c-8-0/
迁移到.Net Core3.1
迁移方案参看:
1、将vs2019更新到16.4.x,会自动安装3.1的sdk。
2、将项目框架升级到3.1,修改csproj文件。
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
3、web项目中Program.cs文件,WebHost 改为 Host,通过ConfigureWebHostDefaults配置主机。
public static IHostBuilder CreateWebHostBuilder(string[] args) { //获取当前dotnet 命令运行应用程序的的所在目录 var configuration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory).AddJsonFile("hostsettings.json").Build(); return Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); webBuilder.UseUrls(configuration["ApplicationUrl"]); }); }
4、web项目中Startup.cs
ConfigureServices 方法中 services.AddMvc() 改为 services.AddControllersWithViews(),对参数 ModelBinderProviders 更改放到 AddMvcOptions 中。
添加 Microsoft.AspNetCore.Mvc.NewtonsoftJson 的引用 有一点需要特别注意, .Net Core 3.0 已经从共享框架中删除了 Newtonsoft.Json,并引入新的 System.Text.Json 类库。
依赖了 Newtonsoft.Json 的项目,需要引入 Microsoft.AspNetCore.Mvc.NewtonsoftJson,这个引用会自动包含 Newtonsoft.Json 库。添加 AddNewtonsoftJson 用来使用老的 Newtonsoft.Json 来序列化 JSON 数据。
//services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddControllersWithViews().AddMvcOptions(option => { //全局异常捕获 option.Filters.Add<GlobalExceptionFilter>(); }).AddNewtonsoftJson();//添加 AddNewtonsoftJson 用来使用老的 Newtonsoft.Json 来序列化 JSON 数据。
Configure 方法中 app.UseMvc() 改为 app.UseRouting() 与 app.UseEndpoints(),IHostingEnvironment改为IWebHostEnvironment,IApplicationLifetime改为IHostApplicationLifetime
(命名空间:Microsoft.Extensions.Hosting)
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime appLifetime) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseAuthorization(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); //endpoints.MapRazorPages();对于支持 Razor Pages 的项目修改 }); }
5、从 Web 项目中移除 Microsoft.AspNetCore...的 PackageReference,因为已经包含在3.1的目标框架内了。
<PackageReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.0" PrivateAssets="All" />
6,更新所有(相关)nuget包,升级nuget中2.x的所有.net core相关引用包。