从ASP.NET Core 2.0迁移到3.0

12

我有一个ASP.NET Core 2.0的应用程序,我想将其升级到ASP.NET Core 3.0。我该如何操作?

2个回答

11

谢谢您的回复。我已经检查了这个链接。但是我想从2.0迁移到3.0,而不是从2.2迁移到3.0。所以我不确定这个链接是否适用于我的项目。 - LCA
1
请您验证一下并让我知道。 - LCA
2
我认为,你可能需要收集有关不同点版本迁移的信息...例如从2.0到2.1,然后从2.1到2.2,最后从2.2到3.0。然后,你可以集体应用所有这些更改。 - Msk

5

官方文档和stackoverflow上大部分的答案都有逐步升级.NET Core版本的步骤(2.0 -> 2.1 -> 2.2 -> 3.0 -> ……)。

然而,由于.NET Core 3.0已经终止支持,我将提供从.NET Core 2.0直接升级到.NET Core 3.1(LTS)版本的说明。

1. 将目标框架更改为3.1

在项目文件中,将TargetFramework <TargetFramework>netcoreapp2.0</TargetFramework>更改为<TargetFramework>netcoreapp3.1</TargetFramework>

enter image description here

2) 更改Main

这是program.cs中的更改

public static void Main(string[] args)
        {
            //BuildWebHost(args).Run(); //Remove this in your code
            CreateWebHostBuilder(args).Build().Run(); //Add this instead
        }

        //Remove this in your code
        public static IWebHost BuildWebHost(string[] args) =>
           WebHost.CreateDefaultBuilder(args)
               .UseStartup<Startup>()
               .Build();

        //Add this instead
        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseStartup<Startup>();

新的Main方法用CreateWebHostBuilder替换了BuildWebHost的调用。添加了IWebHostBuilder以支持新的集成测试基础架构。

3) Startup.cs 的更改

3.1) AddMvc() 方法

您可以看到一个名为AddMvc()的方法。此方法具有所有功能,因此您可以创建任何类型的应用程序(Web API、MVC和Razor Pages)。即使它们不是必需的,它也会为您的应用程序添加额外的功能,这可能会影响您的应用程序性能。

   services.AddMvc(); //Remove this

相反,

  • 如果你想创建一个没有视图的Web API应用程序,请添加 services.AddControllers()

  • 如果你想使用Razor Page应用程序,请添加 services.AddRazorPages();

  • 如果你想开发模型视图控制器(即MVC应用程序),请添加 services.AddControllersWithViews();

这些新方法也可以组合使用。

3.2) Newtonsoft.Json (Json.NET)支持

Newtonsoft.Json已从ASP.NET Core共享框架中删除。现在,ASP.NET Core的默认JSON序列化程序是System.Text.Json。 但是,如果您的应用程序已经使用它,请先安装Microsoft.AspNetCore.Mvc.NewtonsoftJson包,然后将 .AddNewtonsoftJson() 追加到新增的MVC服务注册方法中。

services.AddControllers()
    .AddNewtonsoftJson();

3.3) 路由启动代码

将 UseMvc 替换为 UseEndpoints。

   //REMOVE
    //app.UseMvc(routes =>
    //{
    //    routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
    //});
    
    //ADD
    app.UseRouting(); //If your app calls UseStaticFiles, place UseStaticFiles before UseRouting
    app.UseEndpoints(endpoints =>
    {
       endpoints.MapControllerRoute(
               name: "default",
               pattern: "{controller=Home}/{action=Index}/{id?}");
    });

注意:调用UseAuthentication、UseAuthorization和UseCors方法必须在UseRouting和UseEndpoints之间出现,才能生效。

3.4)在Configure方法中,

将IHostingEnvironment替换为IWebHostEnvironment。

//public void Configure(IApplicationBuilder app, IHostingEnvironment env)
public void Configure(IApplicationBuilder app, IWebHostEnvironment  env)

添加app.UseHttpsRedirection(),对于非开发环境,请添加app.UseHsts();

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseHsts();
}

 app.UseHttpsRedirection();

4 更新global.json中的.NET Core SDK版本

如果您依赖于global.json文件来指定特定的.NET Core SDK版本,请更新版本属性为已安装的3.1 SDK版本。

{
  "sdk": {
    "version": "3.1.101"
  }
}

5) 删除过时的包引用

许多 NuGet 包不再在 ASP.NET Core v3.0 版本之后生成。 例如,删除 Microsoft.AspNetCore.All 的包引用(如果你使用的是 v2.0),或者删除 Microsoft.AspNetCore.App 的包引用(如果你使用的是 v2.1)。

**

6) 更新 Microsoft 包引用

在项目文件中,将 Microsoft 包引用的版本属性更新为 3.1.0 或更高版本。 你也可以使用 Nuget 包管理器轻松完成此操作。 enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接