zoukankan      html  css  js  c++  java
  • .Net Core2.2升级到3.1小记

    .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,右键项目 - 属性 - 目标框架,或者修改csproj文件。

      <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
      </PropertyGroup>
    

    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();
    }
  • 相关阅读:
    何为 ISAPI
    MacDown-The open source Markdown editor for OS X.
    Atom使用
    运维
    Perl
    Kaggle
    J2EE
    leetcode
    Tensorflow 学习笔记
    EXCEL公式及宏
  • 原文地址:https://www.cnblogs.com/wu_u/p/12068861.html
Copyright © 2011-2022 走看看