.Net Core2.2升级到3.1总结

 

Net Core2.2升级到3.1总结

可参考资料:

https://docs.microsoft.com/zh-cn/aspnet/core/migration/22-to-30?view=aspnetcore-5.0&tabs=visual-studio

https://docs.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-3.x/breaking-changes 

 

netcore3.1 下载:

https://dotnet.microsoft.com/download/dotnet/3.1

 

升级之后使用VS2019以及以上版本哦

 

一、   配置项修改 

1.       netcore版本修改为3.1 

.Net Core2.2升级到3.1总结

  

2.   Nuget包升级      

      (1)删除包:Microsoft.AspNetCore.App 

(2)删除包:Microsoft.AspNetCore.Razor.Design 

 (3)升级包版本:Swashbuckle.AspNetCore 升级到5.0.0

 

3.  Program类修改 

IWebHostBuilder 修改为IHostBuilder 

 .Net Core2.2升级到3.1总结

    

 代码如下:

 Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args)        

                .ConfigureWebHostDefaults(webBuilder =>

                {

                    webBuilder.UseStartup<Startup>()

                    .ConfigureLogging((hostingContext, logging) =>

                    {

                        logging.AddConsole();

                    })

                    .UseKestrel(op =>

                    {

                        op.ListenAnyIP(5000,

                             listenOptions =>

                             {

                                 listenOptions.Protocols = HttpProtocols.Http1;

                             });

                        op.Limits.MaxRequestBodySize = null;

                    });

                })

            .UseCastleWindsor(HKIocManager.Instance.IocContainer);

 

 

4.       Startup类修改:

 

(1). IHostingEnvironment修改为IWebHostEnvironment

 

.Net Core2.2升级到3.1总结

 

.Net Core2.2升级到3.1总结.Net Core2.2升级到3.1总结

 

 

 .Net Core2.2升级到3.1总结

  

(2): ConfigureServices方法返回结果由IServiceProvider修改为void 

.Net Core2.2升级到3.1总结

 

 

(3):services.AddMvc()修改为  services.AddControllers().AddNewtonsoftJson(); 

.Net Core2.2升级到3.1总结

  

      注意:方法名结尾的async会自动取消。

     比如:定义的方法名为SearchMemberAsync() 

         但是在请求方法SearchMemberAsync时提示没有此方法 

         请求SearchMember方法时却请求成功 

为了方法名结尾不取消async,配置SuppressAsyncSuffixInActionNames参数为false。

 

代码如下: 

  services.AddControllers(options =>

            {

                options.SuppressAsyncSuffixInActionNames = false;

            }).AddNewtonsoftJson();      

 

 

(4)swagger配置修改: 

.Net Core2.2升级到3.1总结 

      .Net Core2.2升级到3.1总结

  

代码如下: 

 services.AddSwaggerGen(options =>

            {

                options.CustomSchemaIds(z => z.FullName);

                options.SwaggerDoc("v1", new OpenApiInfo { Title = "自定义 API", Version = "v1" });

                options.DocInclusionPredicate((s, b) => true);

                options.IncludeXmlComments(Path.Combine(_environment.ContentRootPath, "XMLDocument", "自定义.xml"));

                options.IncludeXmlComments(Path.Combine(_environment.ContentRootPath, "XMLDocument", "自定义.xml"));

 

                options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()

                {

                    Description = "JWT 授权. Example: \"Authorization: Bearer {token}\"",

                    Name = "Authorization",

                    In = ParameterLocation.Header,

                    Type = SecuritySchemeType.ApiKey,

                    Scheme = "bearer",

                    BearerFormat = "JWT"

                });

                options.AddSecurityRequirement(new OpenApiSecurityRequirement

                {

                    {

                          new OpenApiSecurityScheme

                          {

                                Reference = new OpenApiReference

                                {

                                   Id = "Bearer",

                                   Type = ReferenceType.SecurityScheme

                                }

                          },

                           Array.Empty<string>()

                    }

                });

            });

  

(4)return services.AddDynamicEF 删除return 

.Net Core2.2升级到3.1总结

 

(5) app.UseMvc修改为app.UseEndpoints

 

.Net Core2.2升级到3.1总结

 

代码如下: 

app.UseEndpoints(endpoints =>

            {

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

                endpoints.MapControllerRoute("defaultWithArea", "{area}/{controller=Home}/{action=Index}/{id?}");

            });

 

 

(6)删除app.UseDeveloperExceptionPage(); 

 添加app.UseRouting(); 

.Net Core2.2升级到3.1总结

  

5.       视图:由以前的DbQuery修改为 DbSet

 

 .Net Core2.2升级到3.1总结

 

 

       并添加以下配置: 

.Net Core2.2升级到3.1总结

  

代码如下: 

private void SetDbView(ModelBuilder modelBuilder)

        {          

            modelBuilder.Entity<VwFilterSku>().HasNoKey().ToView("vw_filter_sku");

 

            modelBuilder.Entity<VwQuerySku>().HasNoKey().ToView("vw_query_sku");

        }

  

6.       Map映射问题

       使用映射必须在数据源或者映射源上面标记AutoMap特性

 .Net Core2.2升级到3.1总结 

.Net Core2.2升级到3.1总结 

.Net Core2.2升级到3.1总结 

 

7.       表名列名转换写法变化 

.Net Core2.2升级到3.1总结

  

8.       枚举DisplayName特征的获取 

由[DisplayName(" ")]特征 修改为[Display(Name=" ")] 

.Net Core2.2升级到3.1总结 

.Net Core2.2升级到3.1总结

.Net Core2.2升级到3.1总结

  

二、    遇到的问题 

1. 

 .Net Core2.2升级到3.1总结

 报错提示: 

.Net Core2.2升级到3.1总结

  

2.       GroupBy写法问题: 

 GroupBy在分组之后没有使用select指定查询的列,就会报错。因为此写法法生成不了sql语句。 

 .Net Core2.2升级到3.1总结

  3.           语句中使用了判断表字段是否是非空使用了IsEmpty

 

 .Net Core2.2升级到3.1总结 

 .Net Core2.2升级到3.1总结

 

参照以下写法是可以生成sql语句的: 

.Net Core2.2升级到3.1总结

 

 

上一篇:2019下半年


下一篇:ZooKeeper