.NET Core 2.2 升級 3.1


簡單記錄下個人升級3.1過程。

 

1.修改目標框架

 

 

 搜索解決方案--netcoreapp-后面幾點幾全部改為3.1

 

在搜索到的文件中,看是否存在這兩個-----移除 Microsoft.AspNetCore... 的 PackageReference,因為已經包含在3.1的目標框架內了。

<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />

  

 

 

2.升級所依賴的NuGet包

將項目依賴的所有NuGet包更新至最新版本

 

 

 

 

 

3.啟動更改

Program.cs

未來版本中將棄用 WebHostBuilder,並將其替換為 HostBuilder

 

原來未修改前代碼

 

 

 

 

HostBuilder 替換 WebHostBuilder

修改后

 

Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext, builder) =>
                {
                    builder.SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile(
                        hostingContext.HostingEnvironment.IsProduction()
                            ? "appsettings.Production.json"
                            : "appsettings.Development.json", true, true)
                    .AddApollo(builder.Build().GetSection("apollo"))
                    .AddDefault();

                    ApolloConfig.Configuration = builder.Build();
                })
                .ConfigureServices(builder =>
                {
                    //Console.WriteLine("ConfigureServices");
                })
                .ConfigureLogging(builder =>
                {
                    //Console.WriteLine("ConfigureLogging");
                })
                .ConfigureHostConfiguration(builder =>
                {
                    //Console.WriteLine("ConfigureHostConfiguration");
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    //Console.WriteLine("ConfigureWebHostDefaults");
                    webBuilder.UseUrls("http://*:5101").UseStartup<Startup>().UseNLog();
                });
View Code

 

 

 

 

 Startup.cs

下圖顯示了應用中已刪除和已更改的行:

 

 

 

 在上圖,標紅的是要刪除的代碼。

 

 

 

 app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
View Code

 

 

 在上圖中,添加的代碼顯示為綠色。

 public void ConfigureServices(IServiceCollection services)
{
        services.AddControllersWithViews();   //控制器+視圖=mvc模式
        services.AddControllers();   //單控制器=WebApi
        services.AddRazorPages();   //Razor Pages
}

 

路由啟動方式

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
    name: "area",
    pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");

    endpoints.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
});

 

 

改到這差不多就改完了。然后刪除掉項目中的隱藏文件   .vs     .vscore       .idea     然后重啟項目,重新生成下解決方案即可。

----------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

如果剛好你也用  Nlog 日志 

原寫法

loggerFactory.AddNLog();//添加NLog
env.ConfigureNLog("LogConfig/nlog.config");//讀取Nlog配置文件 

修改為

loggerFactory.AddNLog();//添加NLog
NLog.Web.NLogBuilder.ConfigureNLog("LogConfig/nlog.config");//讀取Nlog配置文件

 

 

loggerFactory.AddNLog(); 可能會過時。

需要在 Program 中通過 .UseNLog() 擴展方法進行配置,刪除過時的那條代碼就可以了。

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>().UseNLog();
                });

 

 

又剛好你們返回json是差不多和我一樣返回的

 

 需要在 Startup.cs 添加 Newtonsoft.json

 public void ConfigureServices(IServiceCollection services)
{           
     services.AddMvc().AddNewtonsoftJson(options =>
     {
                //忽略循環引用
                options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
                //不使用駝峰樣式的key
                options.SerializerSettings.ContractResolver = new DefaultContractResolver();
      });
 }

ASP.NET Core 的默認 JSON 序列化程序現已 System.Text.Json,這是 .NET Core 3.0 中的新增項。

所以可能會有問題,如沒問題請忽略。

 

注意: 如果該AddNewtonsoftJson方法不可用,請確保已安裝AspNetCore包。 常見的錯誤是安裝newtonsoft.json包,而不是AspNetCore NewtonsoftJson包。

 

 

從 ASP.NET Core 2.2 遷移到3.0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM