一.前言
.NET Core 3.0將會在 .NET Conf 大會上正式發(fā)布,截止今日發(fā)布了9個(gè)預(yù)覽版,改動也是不少,由于沒有持續(xù)關(guān)注,今天將前面開源的動態(tài)
WebApi項(xiàng)目 <https://github.com/dotnetauth/Panda.DynamicWebApi>遷移到.NET Core
3.0還花了不少時(shí)間踩坑,給大家分享一下我在遷移過程中遇到的坑。遷移的版本是當(dāng)前Release最新版本 .NET Core 2.2 到 .NET Core
3.0 Preview 9。
二.ASP.NET Core 項(xiàng)目遷移
官方遷移文檔:從 ASP.NET Core 2.2 遷移到3.0
<https://docs.microsoft.com/zh-cn/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio>
,這個(gè)官方文檔比較詳細(xì),但是有一些東西里面并沒有寫。
1.更改框架版本
將 TargetFramework 版本改為 netcoreapp3.0
2.移除Nuget包
移除所有 Nuget包
將其余 Nuget 包更新到支持 .NET Core 3.0 版本
3.Program更改
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>(); });
}
4.Startup更改
ConfigureServices 方法:
* services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
改為services.AddControllers()(WebApi) / services.AddControllersWithViews();(MVC)
Configure 方法:
*
該方法里獲取Host環(huán)境信息接口類型,IHostingEnvironment改為 IWebHostEnvironment
*
app.UseMVc 改為:
WebApi:
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?}"); });
關(guān)于Json組件
ASP.NET Core 3.0 默認(rèn)移除了 Newtonsoft.Json ,使用了微軟自己實(shí)現(xiàn)的 System.Text.Json,如果要改為
Newtonsoft.Json ,那么有以下兩步:
1.安裝Nuget包:
Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson
2.注冊
services.AddControllers().AddNewtonsoftJson();
三.類庫(Class Library Net Standard 2.0)項(xiàng)目遷移
因?yàn)?ASP.NET Core 3.0 對元包機(jī)制的改動,現(xiàn)在不能通過nuget安裝 Microsoft.AspNetCore.All
<https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage?view=aspnetcore-3.0>
或者M(jìn)icrosoft.AspNetCore.App
<https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage-app?view=aspnetcore-3.0>
3.0版本,以及他們包含的大多數(shù)Nuget包也不能通過nuget安裝了(沒有3.0對應(yīng)的版本)。如果說還引用2.2版本的nuget包,那么運(yùn)行起來可能會出錯(cuò)。元包被包含在了
.NET Core SDK中,這意味著如果我們的類庫項(xiàng)目依賴了 AspNetCore 相關(guān)組件,那么將沒法繼續(xù)將項(xiàng)目目標(biāo)框架設(shè)置為 .NET Standard
了,只能設(shè)置為.NET Core 3.0,因?yàn)锳SP.NET Core 3.0 only run on .NET Core 。
元包機(jī)制改動原因:https://github.com/aspnet/AspNetCore/issues/3608
<https://github.com/aspnet/AspNetCore/issues/3608>
1.更改框架版本
2.更新Nuget包
移除 Microsoft.AspNetCore.* 不具有 .NET Core 3.0 的版本,例如:
添加 FrameworkReference(不是 PackageReference) 引用:
三.結(jié)束
題外話:ASP.NET Core 直到2.2 是可以同時(shí)運(yùn)行在 .NET Framework 和 .NET Core 中,但是從 ASP.NET Core
3.0 開始,將會只支持 .NET Core。
相關(guān)資料:A first look at changes coming in ASP.NET Core 3.0
<https://devblogs.microsoft.com/aspnet/a-first-look-at-changes-coming-in-asp-net-core-3-0/>
上面說的改動,微軟官方都有解釋原因,其實(shí)是為了變得更好而改動,彌補(bǔ)以前的缺點(diǎn),只不過對于用了這么久的Core來說有點(diǎn)折騰,但是還是能接受,為了更好的
.NET Core。
熱門工具 換一換