分类

链接

2019 年 12 月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

近期文章

热门标签

新人福利,免费薅羊毛

现在位置:    首页 > .NET > 正文
共享办公室出租
.Net Core2.2升级到3.1
.NET 暂无评论 阅读(443)

.NET Core 3.1 作为LTS长期支持版本,会提供3年的支持(明年就出.net5),值得升级(吗)。

目前主流的第三方包大多都已经提供了支持,2.x => 3.1还是变化不是特别多,EF Core坑就大咯,谨慎。

 

ASP.NET Core 3.1 的新增功能

https://docs.microsoft.com/zh-cn/aspnet/core/release-notes/aspnetcore-3.1?view=aspnetcore-3.1

EF Core 3.0重大改变

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

 

1,将VS2019更新到16.4.x,会自动安装3.1的SDK。

2,将项目目标框架升级到3.1,右键项目 - 属性 - 目标框架

3,WEB项目中Program.cs文件,WebHost 改为 Host

复制代码
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>();
            });
}
复制代码

 

4,WEB项目中Startup.cs

ConfigureServices 方法中 services.AddMvc() 改为 services.AddControllersWithViews()

//services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddControllersWithViews();

Configure 方法中 app.UseMvc() 改为 app.UseRouting() 与 app.UseEndpoints()

复制代码
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }
    app.UseStaticFiles();
    app.UseAuthorization();

    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}
复制代码

 

5,更新所有(相关)nuget包到最新

 

6,重新生成解决方案,报错 The project .... must provide a value for Configuration.

从 Web 项目中移除 Microsoft.AspNetCore... 的 PackageReference,因为已经包含在3.1的目标框架内了。

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

 

大功告成,至少编译通过了,运行中目前只碰到一个坑。

A tracking query projects owned entity without corresponding owner in result.Owned entities cannot be tracked without their owner. Either include the owner entity in the result or make query non-tracking using AsNoTracking().

AutoMapper的ProjectTo<>导致,暂时加了个AsNoTracking()解决问题,根据报错信息来看还有另一种解决方案。

复制代码
public IEnumerable<UserDto> GetAll()
{
    return _userRepository.GetAll(tracking: false)
        .OrderByDescending(s => s.Id)
        .ProjectTo<UserDto>(_mapper.ConfigurationProvider)
        .AsEnumerable();
}
复制代码
坑2:返回JSON首字母大写(pasical)
services.AddMvc().AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null);

============ 欢迎各位老板打赏~ ===========

本文版权归Bruce's Blog所有,转载引用请完整注明以下信息:
本文作者:Bruce
本文地址:.Net Core2.2升级到3.1 | Bruce's Blog

发表评论

留言无头像?