簡單記錄下個人升級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(); });
Startup.cs
下圖顯示了應用中已刪除和已更改的行:
在上圖,標紅的是要刪除的代碼。

app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
在上圖中,添加的代碼顯示為綠色。
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包。