淺談從ASP.NET Core2.2到3.0你可能會(huì)遇到這些問(wèn)題
趁著假期的時(shí)間所以想重新學(xué)習(xí)下微軟的官方文檔來(lái)鞏固下基礎(chǔ)知識(shí)。我們都知道微軟目前已經(jīng)發(fā)布了.NET Core3.0的第三個(gè)預(yù)覽版,同時(shí)我家里的電腦也安裝了vs2019。So,就用vs2019+.NET Core3.0來(lái)跟著做一下Contoso University這個(gè)WEB應(yīng)用,但是在基于3.0進(jìn)行操作的時(shí)候遇到了一些問(wèn)題,所以我就查看了微軟的《從 ASP.NET Core 遷移 2.2 到 3.0 預(yù)覽版 2》這篇文檔,就著今天遇到的問(wèn)題,所以我整理下,希望對(duì)大伙有所幫助,當(dāng)然大伙也可以直接閱讀微軟的官方文檔進(jìn)行查看。但是我在閱讀官方說(shuō)明的時(shí)候,總感覺(jué)翻譯的不是很準(zhǔn)確,讀起來(lái)很拗口,所以這里我是自己的理解對(duì)官方文檔的一個(gè)補(bǔ)充。
我遇到的問(wèn)題
ASP.NET Core2.0時(shí)代,若要為項(xiàng)目添加 EF Core 支持,需要安裝相應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)包。 教程中使用 SQL Server,相關(guān)驅(qū)動(dòng)包Microsoft.EntityFrameworkCore.SqlServer。 此包包含在 Microsoft.AspNetCore.App 元包中,因此,如果應(yīng)用具有對(duì) Microsoft.AspNetCore.App 包的包引用,則無(wú)需引用該包。而2.0中的模板項(xiàng)目會(huì)自動(dòng)為我們加載Mcrosoft.AspNetCore.App這個(gè)包的。但是3.0中沒(méi)有了這個(gè)Mcrosoft.AspNetCore.App這個(gè)包,模塊化的更徹底了!所需要的EF相關(guān)的包需要你自己來(lái)進(jìn)行引用。
2.0升3.0升級(jí)指南
就著今天遇到的問(wèn)題,所以我整理下ASP.NET Core從2.0升級(jí)3.0的一個(gè)升級(jí)指南,希望對(duì)大伙有所幫助,當(dāng)然大伙也可以直接閱讀微軟的官方文檔進(jìn)行查看。但是我在閱讀官方說(shuō)明的時(shí)候,總感覺(jué)翻譯的不是很準(zhǔn)確,讀起來(lái)很拗口,所以這里我是自己的理解對(duì)官方文檔的一個(gè)補(bǔ)充。
更新項(xiàng)目文件
設(shè)置TargetFramework到netcoreapp3.0:
<TargetFramework>netcoreapp3.0</TargetFramework>
刪除Microsoft.AspNetCore.All或Microsoft.AspNetCore.App元包的任何<PackageReference>。
將<PackageReference>元素中剩余的Microsoft.AspNetCore.*程序包更新到當(dāng)前的預(yù)覽版中 (例如,3.0.0-preview3.19128.7)。
如果沒(méi)有對(duì)應(yīng)的 3.0 版本的包,則說(shuō)明包可能會(huì)在 3.0 中棄用。 其中許多之前都屬于Microsoft.AspNetCore.App并且不需要單獨(dú)引用的包,如上面我遇到的問(wèn)題,關(guān)于SQL Server的EF相關(guān)的包。 具體的不再在 3.0 中生成的包的列表,請(qǐng)參閱aspnet/AspNetCore #3756。
某些程序集已從2.x和3.0之間的Microsoft.aspnetcore.app中刪除。如果您正在使用aspnet/AspNetCore #3755中列出的包中的API,則可能需要單獨(dú)添加到。
例如,Microsoft.EntityFrameworkCore和System.Data.SqlClient不再屬于Microsoft.AspNetCore.App得一部分。 Microsoft.aspnetcore.app中的程序集列表尚未定稿,將在3.0 RTM之前更改。
添加Json.NET 支持。
項(xiàng)目默認(rèn)為 ASP.NET Core 3.0 或更高版本設(shè)置為進(jìn)程內(nèi)承載模型。 當(dāng)然,如果其值為InProcess您還可以通過(guò)刪除<AspNetCoreHostingModel>元素,來(lái)進(jìn)行修改。
作為提高ASP.NET Core 共享的框架工作的一部分,Json.NET已從 ASP.NET Core 共享框架中刪除。
若要在 ASP.NET Core 3.0 項(xiàng)目中使用 Json.NET:
添加到包引用Microsoft.AspNetCore.Mvc.NewtonsoftJson
更新ConfigureServices調(diào)用AddNewtonsoftJson()。
services.AddMvc() .AddNewtonsoftJson();
Newtonsoft 的個(gè)性化設(shè)置可以設(shè)置為AddNewtonsoftJson:
services.AddMvc() .AddNewtonsoftJson(options => options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver());
HostBuilder 替換 WebHostBuilder
使用 ASP.NET Core 3.0 模板泛型宿主。 早期版本使用Web 主機(jī)。 下面的代碼顯示了生成 ASP.NET Core 3.0 模板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>(); }); }
下面的代碼演示模板生成 ASP.NET Core 2.2Program類:
public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>(); }
IWebHostBuilder 將保留在 3.0,是一種webBuilder上面的代碼示例所示。 WebHostBuilder 將在未來(lái)版本中棄用并替換為HostBuilder。
從WebHostBuilder到HostBuilder最顯著的變化是依賴關(guān)系注入 (DI)。 使用時(shí)HostBuilder,只能將IConfiguration并IHostingEnvironment注入到Startup的構(gòu)造函數(shù)中。 HostBuilder DI 約束:
- 使DI容器只能構(gòu)建一次。
- 避免產(chǎn)生的對(duì)象生存期問(wèn)題,例如解決多個(gè)單例實(shí)例。
更新 SignalR 代碼
如果您調(diào)用AddJsonProtocol,將其替換為AddNewtonsoftJsonProtocol。
以下示例顯示更改前后的服務(wù)器代碼:
services.AddSignalR(...) .AddJsonProtocol(...) // 2.2
services.AddSignalR(...) .AddNewtonsoftJsonProtocol(...) // 3.0
以下示例顯示更改前后的.NET客戶端代碼:
connection = new HubConnectionBuilder() .WithUrl(...) .AddJsonProtocol(...) // 2.2 .Build()
connection = new HubConnectionBuilder() .WithUrl(...) .AddNewtonsoftJsonProtocol(...) // 3.0 .Build()
選擇啟用運(yùn)行時(shí)編譯
在 3.0 中,運(yùn)行時(shí)編譯是可選的方案。 若要啟用運(yùn)行時(shí)編譯,請(qǐng)參閱ASP.NET Core 中的 Razor 文件編譯。
總結(jié)
感覺(jué)微軟在努力實(shí)現(xiàn)ASP.NET Core的模塊化,減小各種依賴,讓包變得更小。同時(shí)ASP.NET Core也已經(jīng)很完善了,大伙是時(shí)候用起來(lái)ASP.NET Core了。另外需要說(shuō)明的一點(diǎn)是,大伙如果是為了體驗(yàn)ASP.NET Core3.0的話,現(xiàn)在就可以,如果是用在生產(chǎn)環(huán)境的話最好還是等待正式版的發(fā)布吧。
以上所述是小編給大家介紹的ASP.NET Core2.2到3.0可能會(huì)遇到的問(wèn)題詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
解決Visual Studio 2005 無(wú)法顯示設(shè)計(jì)視圖的方法
解決Visual Studio 2005 無(wú)法顯示設(shè)計(jì)視圖的方法...2007-04-04vs2010無(wú)法打開項(xiàng)目文件的原因分析及解決方法
使用 Visual Studio 2010 SP1 打開項(xiàng)目文件的時(shí)候出現(xiàn)以下提示信息'無(wú)法打開項(xiàng)目文件'此時(shí)此刻很是郁悶,不過(guò)已有解決方法了,感性的朋友可以了解下,或許可以解決你的難題2013-01-01Opencv2.4.13與Visual Studio2013環(huán)境搭建配置教程
這篇文章主要為大家詳細(xì)介紹了Opencv2.4.13 與Visual Studio2013環(huán)境搭建配置教程的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Visual Studio 2013更新內(nèi)容簡(jiǎn)介
這篇文章主要為大家分享了Visual Studio 2013更新內(nèi)容簡(jiǎn)介,感興趣的小伙伴們可以參考一下2016-05-05FileUpload使用Javascript檢查擴(kuò)展名是否有效實(shí)現(xiàn)思路
在JavaScript獲取FileUpload控件的文件路徑,并取得路徑中的文件擴(kuò)展名,再與陣列中的擴(kuò)展名比較,如果存在,說(shuō)明上傳的文件是有效的,反之無(wú)效,感興趣的朋友可以了解下,或許對(duì)你有所幫助2013-02-02.NET?6新特性試用之DateOnly和TimeOnly類型
這篇文章主要介紹了.NET?6新特性試用之DateOnly和TimeOnly類型,主要介紹DateOnly和TimeOnly類型使用過(guò)程及存在的一些過(guò)程,需要的小伙伴可以參考一下2022-03-03