• ASP.NET Core 2.2 项目升级至 3.0 备忘录


    将 ASP.NET Core 2.2 迁移至 ASP.NET Core 3.0 需要注意的地方记录在这篇随笔中。

    TargetFramework 改为 netcoreapp3.0 

    <TargetFramework>netcoreapp3.0</TargetFramework>

    从 Web 项目(Microsoft.NET.Sdk.Web)中移除 Microsoft.AspNetCore.App 的 PackageReference 

    <PackageReference Include="Microsoft.AspNetCore.App" />

    对于类库项目,如果有对 Microsoft.AspNetCore.App 的 PackageReference 引用,需要改为 FrameworkReference

    <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
    </ItemGroup>

    或者将 Microsoft.NET.Sdk 改为 Microsoft.NET.Sdk.Web ,将 OutputType 设置为 Library ,详见博问

    <Project Sdk="Microsoft.NET.Sdk.Web">
      <PropertyGroup>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <OutputType>Library</OutputType>
      </PropertyGroup>
    </Project>

    Program 中 WebHost 改为 Host (注:使用 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>();
                });
    }

    如果不使用 Razor Pages ,在 Startup.ConfigureServices 中将 services.AddMvc() 改为

    services.AddControllers();

    Startup 中 app.UseMvc() 改为 app.UseRouting() 与 app.UseEndpoints()

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

     .NET Core 3.0 SDK 的 docker 镜像

    mcr.microsoft.com/dotnet/core/sdk:3.0

    ASP.NET Core 3.0 runtime 的 docker 镜像

    mcr.microsoft.com/dotnet/core/aspnet:3.0

    Web API 响应的 json 数据中文被编码的问题(详见博问

    services.AddMvc().AddNewtonsoftJson();

    对于 Razor Class Library 项目 .csproj 配置

    <Project Sdk="Microsoft.NET.Sdk.Razor">
      <PropertyGroup>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
      </PropertyGroup>
      <ItemGroup>
        <FrameworkReference Include="Microsoft.AspNetCore.App" />
      </ItemGroup>
    </Project>

    EF Core 3.0 配置一对一关系(生成 INNER JOIN SQL 语句)

    builder.HasOne(p => p.ViewCount)
        .WithOne()
        .IsRequired()
        .HasPrincipalKey<ViewCount>(vc => vc.PostId); 

    EF Core 3.0 OwnsOne 关系配置注意

    builder.OwnsOne(b => b.ScoreRank, sr =>
    {
        sr.ToTable("ScoreRank");
        sr.HasKey(x => x.BlogId);
        //EF Core 3.0 所需
        sr.WithOwner().HasForeignKey(x => x.BlogId);
    });

    EF Plus(Z.EntityFramework.Plus.EFCore) 不支持 .NET Core 3.0 ,详见博问

    EFCore.BulkExtensions 也不支持 .NET Core 3.0 ,但只需修改它的1行代码就可以支持,详见博问 

    如果数据库服务器用的是 SQL Server 2008 ,并且用的是 docker 容器部署,需要修改 openssl 的配置,详见博问

    【相关链接】

    Breaking changes to Microsoft.AspNetCore.App in 3.0 

  • 相关阅读:
    openstack controller ha测试环境搭建记录(七)——配置glance
    openstack controller ha测试环境搭建记录(六)——配置keystone
    openstack controller ha测试环境搭建记录(五)——配置rabbitmq集群
    spring classpath & classpath*
    SVN相关
    eclipse安装springboot插件
    Hbase Shell常用命令
    CentOS下安装Hbase
    CentOS安装JDK-tar.gz文件
    Linux常用命令
  • 原文地址:https://www.cnblogs.com/yanglang/p/11804535.html
Copyright © 2020-2023  润新知