我在ASP.NET Core 2.0中有一个应用程序。我想将其升级到ASP.NET Core 3.0。我该怎么办?
答案 0 :(得分:1)
官方文档和stackoverflow中这个问题的大多数答案也有升级.NET核心版本的步骤(2.0 -> 2.1 -> 2.2 -> 3.0 -> ....)。 但是,由于 .NET Core 3.0 已经结束它的生命,我将给出直接从 .NET Core 2.0 升级到 .NET Core 3.1(LTS) 版本的说明。
在项目文件中更改 TargetFramework
<TargetFramework>netcoreapp2.0</TargetFramework>
到 <TargetFramework>netcoreapp3.1</TargetFramework>
这些是 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 将调用 BuildWebHost 替换为 添加了 CreateWebHostBuilder.IWebHostBuilder 以支持新的集成测试基础架构。
3.1) AddMvc() 方法
您可以看到一个名为 AddMvc() 的方法。此方法具有所有功能。因此,您可以创建任何类型的应用程序(Web API、MVC 和 Razor Pages)。即使您的应用程序不需要这些功能,它也会添加额外的功能,这可能会影响您的应用程序的性能。
services.AddMvc(); //Remove this
相反,
如果您想创建一个没有 视图,添加 services.AddControllers()
如果您想使用 Razor Page 应用程序,请添加 services.AddRazorPages();
如果你想开发一个模型视图控制器(即MVC application), 添加 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) 路由启动代码
用 UseEndpoints 替换 UseMvc
//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) 在配置方法中,
用 IWebHostEnvironment 替换 IHostingEnvironment
//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();
如果您依赖 global.json 文件来定位特定的 .NET Core SDK 版本,请将版本属性更新为安装的 3.1 SDK 版本
{
"sdk": {
"version": "3.1.101"
}
}
大量 NuGet 包不是从 ASP.NET Core v3.0 之后的版本生成的。 例如,删除 Microsoft.AspNetCore.All(从 v2.0 开始时)或 Microsoft.AspNetCore.App(从 v2.1 开始时)的包引用
**
在项目文件中将 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包引用的版本属性更新为 3.1.0 或更高版本。您也可以使用 Nuget 包管理器执行此操作。
<ItemGroup>
- <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="2.0.1" />
+ <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.16" />
</ItemGroup>
答案 1 :(得分:0)
关注此链接。这将为您的迁移提供一些指导。
https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-2.2&tabs=visual-studio
如评论中所述,从2.0迁移到3.0的完整路径为:
您将必须逐步进行操作。