简单记录下个人升级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包。