ASP.NET Core 3.0遷移的完美避坑指南
一.前言
.NET Core 3.0將會在 .NET Conf 大會上正式發(fā)布,截止今日發(fā)布了9個預覽版,改動也是不少,由于沒有持續(xù)關注,今天將前面開源的動態(tài)WebApi項目遷移到.NET Core 3.0還花了不少時間踩坑,給大家分享一下我在遷移過程中遇到的坑。遷移的版本是當前Release最新版本 .NET Core 2.2 到 .NET Core 3.0 Preview 9。
二.ASP.NET Core 項目遷移
官方遷移文檔:從 ASP.NET Core 2.2 遷移到3.0 ,這個官方文檔比較詳細,但是有一些東西里面并沒有寫。
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 方法:
1、該方法里獲取Host環(huán)境信息接口類型,IHostingEnvironment
改為 IWebHostEnvironment
2、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?}"); });
關于Json組件
ASP.NET Core 3.0 默認移除了 Newtonsoft.Json
,使用了微軟自己實現(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)項目遷移
因為 ASP.NET Core 3.0 對元包機制的改動,現(xiàn)在不能通過nuget安裝 Microsoft.AspNetCore.All 或者 Microsoft.AspNetCore.App 3.0版本,以及他們包含的大多數(shù)Nuget包也不能通過nuget安裝了(沒有3.0對應的版本)。如果說還引用2.2版本的nuget包,那么運行起來可能會出錯。元包被包含在了 .NET Core SDK中,這意味著如果我們的類庫項目依賴了 AspNetCore 相關組件,那么將沒法繼續(xù)將項目目標框架設置為 .NET Standard 了,只能設置為.NET Core 3.0,因為 ASP.NET Core 3.0 only run on .NET Core 。
元包機制改動原因:https://github.com/aspnet/AspNetCore/issues/3608
1.更改框架版本
2.更新Nuget包
移除 Microsoft.AspNetCore.* 不具有 .NET Core 3.0 的版本,例如:
添加 FrameworkReference(不是 PackageReference) 引用:
三.結束
題外話:ASP.NET Core 直到2.2 是可以同時運行在 .NET Framework 和 .NET Core 中,但是從 ASP.NET Core 3.0 開始,將會只支持 .NET Core。
相關資料:A first look at changes coming in ASP.NET Core 3.0
上面說的改動,微軟官方都有解釋原因,其實是為了變得更好而改動,彌補以前的缺點,只不過對于用了這么久的Core來說有點折騰,但是還是能接受,為了更好的 .NET Core。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。
相關文章
Visual Studio 2017正式版發(fā)布 亮點看這里
終于等到你,最強 IDE Visual Studio 2017 正式版發(fā)布,這篇文章主要為大家詳細解析了Visual Studio 2017正式版發(fā)布的細節(jié),亮點看這里2017-03-03在dropDownList中實現(xiàn)既能輸入一個新值又能實現(xiàn)下拉選的代碼
在dropDownList中實現(xiàn)既能輸入一個新值,又能實現(xiàn)下拉選項,想必很多的朋友已經為此功能按耐不住了吧,接下來與大家分享下如何實現(xiàn),感興趣的朋友可以參考下哈2013-04-04C#數(shù)據(jù)綁定控件中的DataSource屬性淺談
使用該屬性指定用來填充Repeater控件的數(shù)據(jù)源。DataSource可以是任何System.Collections.IEnumerable對象, 如用于訪問數(shù)據(jù)庫的System.Data.DataView、System.Collections.ArrayList、System.Collections.Hashtable、數(shù)組或IListSource對象2013-02-02實現(xiàn)DataGridView控件中CheckBox列的使用實例
最近做WindowsForms程序,使用DataGridView控件時,加了一列做選擇用,發(fā)現(xiàn)CheckBox不能選中。搜索后,要實現(xiàn)DataGridView的CellContentClick事件,將代碼貼一下2014-01-01GridView控件實現(xiàn)數(shù)據(jù)的顯示和刪除(第8節(jié))
這篇文章主要介紹了GridView控件實現(xiàn)數(shù)據(jù)的顯示和刪除,以新聞網(wǎng)站為例,實現(xiàn)對新聞數(shù)據(jù)的操作,了解各種數(shù)據(jù)源控件與數(shù)據(jù)綁定控件的類型和作用,需要的朋友可以參考下2015-08-08