从ASP.NET Core 2.0迁移到3.0

LCA*_*LCA 9 asp.net migration version asp.net-core-3.0

我在ASP.NET Core 2.0中有一个应用程序。我想将其升级到ASP.NET Core 3.0。我怎样才能做到这一点?

Msk*_*Msk 9

点击此链接。这将为您的迁移提供一些指导。

https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-2.2&tabs=visual-studio
Run Code Online (Sandbox Code Playgroud)

如评论中所述,从2.0迁移到3.0的完整路径是:

您将必须逐步进行操作。

  • 我认为,您可能需要收集有关不同点版本迁移的信息...示例2.0到2.1,然后2.1到2.2,最后是2.2到3.0。然后,您可以共同应用所有这些更改。 (2认同)

Thi*_*iri 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>

在此输入图像描述

2) 主要变更

这些是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>();
Run Code Online (Sandbox Code Playgroud)

新的 Main 使用 CreateWebHostBuilder 替换了对 BuildWebHost 的调用。添加 IWebHostBuilder 是为了支持新的集成测试基础架构。

3) 对 Startup.cs 的更改

3.1) AddMvc()方法

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

   services.AddMvc(); //Remove this
Run Code Online (Sandbox Code Playgroud)

反而,

  • 如果要创建没有视图的 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();
Run Code Online (Sandbox Code Playgroud)

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?}");
    });
Run Code Online (Sandbox Code Playgroud)

注意:对 UseAuthentication、UseAuthorization 和 UseCors 的调用必须出现在对 UseRouting 和 UseEndpoints 的调用之间才有效

3.4)在Configure方法中,

将 IHostingEnvironment 替换为 IWebHostEnvironment

//public void Configure(IApplicationBuilder app, IHostingEnvironment env)
public void Configure(IApplicationBuilder app, IWebHostEnvironment  env)
Run Code Online (Sandbox Code Playgroud)

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

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

 app.UseHttpsRedirection();
Run Code Online (Sandbox Code Playgroud)

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

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

{
  "sdk": {
    "version": "3.1.101"
  }
}
Run Code Online (Sandbox Code Playgroud)

5) 删除过时的包引用

大量 NuGet 包不是从 ASP.NET Core v3.0 之后的版本生成的。例如,删除 Microsoft.AspNetCore.All(当您从 v2.0 过来时)或 Microsoft.AspNetCore.App(当您从 v2.1 过来时)的包引用

**

6) 更新微软包参考

在项目文件中将 Microsoft 包引用的版本属性更新为 3.1.0 或更高版本。您也可以使用 Nuget 包管理器轻松完成此操作。 在此输入图像描述