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
原文地址:https://www.cnblogs.com/yanglang/p/11804535.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法