ASP.NET Core 3.0 遷移避坑指南

一.前言

.NET Core 3.0將會在 .NET Conf 大會上正式發佈,截止今日發佈了9個預覽版,改動也是很多,因爲沒有持續關注,今天將前面開源的動態WebApi項目遷移到.NET Core 3.0還花了很多時間踩坑,給你們分享一下我在遷移過程當中遇到的坑。遷移的版本是當前Release最新版本 .NET Core 2.2 到 .NET Core 3.0 Preview 9。html

二.ASP.NET Core 項目遷移

官方遷移文檔:從 ASP.NET Core 2.2 遷移到3.0 ,這個官方文檔比較詳細,可是有一些東西里面並無寫。git

1.更改框架版本

將 TargetFramework 版本改成 netcoreapp3.0github

1568095449709

2.移除Nuget包

移除下圖 Nuget 包web

1568095550898

將其他 Nuget 包更新到支持 .NET Core 3.0 版本shell

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>();
                });
    }

1568095685774

4.Startup更改

ConfigureServices 方法:app

  1. services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); 改成 services.AddControllers()(WebApi) / services.AddControllersWithViews();(MVC)

1568096481645

Configure 方法:框架

  1. 該方法裏獲取Host環境信息接口類型,IHostingEnvironment改成 IWebHostEnvironmentvisual-studio

    1568096459106

  2. app.UseMVc 改成:ui

WebApi:spa

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 ,使用了微軟本身實現的 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 對元包機制的改動,如今不能經過nuget安裝 Microsoft.AspNetCore.All 或者 Microsoft.AspNetCore.App 3.0版本,以及他們包含的大多數Nuget包也不能經過nuget安裝了(沒有3.0對應的版本)。若是說還引用2.2版本的nuget包,那麼運行起來可能會出錯。元包被包含在了 .NET Core SDK中,這意味着若是咱們的類庫項目依賴了 AspNetCore 相關組件,那麼將無法繼續將項目目標框架設置爲 .NET Standard 了,只能設置爲.NET Core 3.0,由於 **ASP.NET Core 3.0 only run on .NET Core **。

元包機制改動緣由:https://github.com/aspnet/AspNetCore/issues/3608

1568097757661

1.更改框架版本

1568097890464

2.更新Nuget包

移除 Microsoft.AspNetCore.* 不具備 .NET Core 3.0 的版本,例如:

1568097911477

添加 FrameworkReference(不是 PackageReference) 引用:

1568097942488

三.結束

題外話: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。

原文出處:https://www.cnblogs.com/stulzq/p/11497624.html

相關文章
相關標籤/搜索