将 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

ASP.NET Core 2.2 迁移至 3.0 备忘录的更多相关文章

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

    将 ASP.NET Core 2.2 迁移至 ASP.NET Core 3.0 需要注意的地方记录在这篇随笔中. TargetFramework 改为 netcoreapp3.0 <Target ...

  2. 从 ASP.NET Core 3.1 迁移到 5.0

    3月中旬,微软官方已经发布了dotnet 5的第一个预览版:5.0.0-preview.1. dotnet core经过前几个版本的发展和沉淀,到3.1已经基本趋于稳定. 所以从.net core 3 ...

  3. asp.net core 从 3.1 到 5.0

    asp.net core 从 3.1 到 5.0 Intro 就在前几天,微软宣布了 .NET5 发布了 RC1 版本,这也意味着 .NET5 的开发基本稳定了,正式发布之前,不会再新增新的 Feat ...

  4. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

  5. 从 ASP.NET Core 2.1 迁移到 2.2 踩坑总结

    官方迁移文档:https://docs.microsoft.com/zh-cn/aspnet/core/migration/21-to-22?view=aspnetcore-2.2&tabs= ...

  6. asp.net core 支付宝支付( 电脑2.0)

    支付宝电脑支付实测在手机浏览器也可以唤醒手机支付宝进行支付,因此也可以作为支付宝手机web支付方式.支付宝电脑支付流程为使用支付宝官方sdk通过获取的支付宝参数构造DefaultAopClient实例 ...

  7. 【原创】Asp.NET Core Web API与Vue 3.0搭建前后分离项目

    特地记录一下,网上的教程写的稀里糊涂的,整得我都心塞塞的,其实实现的过程蛮简单的 问题是这样的:我将Vue构建生成好的文件,放在后端wwwroot文件里面,并开启静态文件访问功能,结果总是无法显示相应 ...

  8. ASP.NET Core MVC配置差异(3.0和2.X)

    https://www.cnblogs.com/lonelyxmas/p/10934388.html net core 2.x MVC配置 public void ConfigureServices( ...

  9. Asp.Net Core 2.2 - HTTP Error 500.0 - ANCM In-Process Handler Load Failure

    检查发布文件下是否存在runtime这个文件夹,如图

随机推荐

  1. AWT 新建窗口

    新建一个窗口 包 import java.awt.*; 定义 Frame frm_Draw = new Frame("Text"); 初始化代码 public void Frame ...

  2. 通过IDEA搭建scala开发环境开发spark应用程序

    一.idea社区版安装scala插件 因为idea默认不支持scala开发环境,所以当需要使用idea搭建scala开发环境时,首先需要安装scala插件,具体安装办法如下. 1.打开idea,点击c ...

  3. 3D Slicer中文教程(二)—软件功能界面介绍

    1.界面介绍 2.菜单及工具栏介绍 (1)菜单 File-文件菜单 文件菜单包含用于加载MRML场景的选项,用于从互联网下载样本数据集或各种类型的各个数据集.此处还提供了保存场景和数据的选项. Edi ...

  4. asyncio协议

    服务端 import asyncio import logging import sys from typing import Optional SERVER_ADDRESS = ('localhos ...

  5. AWK如何打印从某一列到最后一列的内容

    awk -F " "  '{for (i=4;i<=NF;i++)printf("%s ", $i);print ""}' file

  6. 【原创】大数据基础之CM5(Cloudera Manager)+CDH5离线安装

    CM/CDH 5.16.1 CM官方:https://www.cloudera.com/products/product-components/cloudera-manager.html CDH官方: ...

  7. vue-地址插件 v-region

    demo地址:https://terryz.gitee.io/vue/#/region/demo

  8. SQL入门(3):定义约束/断言assertion/触发器trigger

    本文介绍数据库的完整性 完整性控制程序: 指定规则,检查规则 (规则就是约束条件) 动态约束 intergrity constraint::=(O,P,A,R) O : 数据集合, 约束的对象 ?: ...

  9. javascript数组去重 String字符串去掉两端空格 javascript Array二分法排序 比较 javascript 求和

    通过原形添加方法: ==================数组去重(对象去重法)======================= Array.prototype.unique=function(){ va ...

  10. [原创]基于Zynq Linux环境搭建(三)

    此篇编译Kernel 解压: [#17#17:26:56 FPGADeveloper@ubuntu ~/Zybo_Demo]$tar zxvf *.tar.gz 进入到文件kernel文件夹中,cle ...