从ASP.NET Core2.2到3.0你可能会遇到这些问题
趁着假期的时间所以想重新学习下微软的官方文档来巩固下基础知识。我们都知道微软目前已经发布了.NET Core3.0的第三个预览版,同时我家里的电脑也安装了vs2019。So,就用vs2019+.NET Core3.0来跟着做一下Contoso University这个WEB应用,但是在基于3.0进行操作的时候遇到了一些问题,所以我就查看了微软的《从 ASP.NET Core 迁移 2.2 到 3.0 预览版 2》这篇文档,就着今天遇到的问题,所以我整理下,希望对大伙有所帮助,当然大伙也可以直接阅读微软的官方文档进行查看。但是我在阅读官方说明的时候,总感觉翻译的不是很准确,读起来很拗口,所以这里我是自己的理解对官方文档的一个补充。
作者:依乐祝
原文链接:https://www.cnblogs.com/yilezhu/p/10661161.html
我遇到的问题
ASP.NET Core2.0时代,若要为项目添加 EF Core 支持,需要安装相应的数据库驱动包。 教程中使用 SQL Server,相关驱动包Microsoft.EntityFrameworkCore.SqlServer。 此包包含在 Microsoft.AspNetCore.App 元包中,因此,如果应用具有对 Microsoft.AspNetCore.App
包的包引用,则无需引用该包。而2.0中的模板项目会自动为我们加载Mcrosoft.AspNetCore.App
这个包的。但是3.0中没有了这个Mcrosoft.AspNetCore.App
这个包,模块化的更彻底了!所需要的EF相关的包需要你自己来进行引用。
2.0升3.0升级指南
就着今天遇到的问题,所以我整理下ASP.NET Core从2.0升级3.0的一个升级指南,希望对大伙有所帮助,当然大伙也可以直接阅读微软的官方文档进行查看。但是我在阅读官方说明的时候,总感觉翻译的不是很准确,读起来很拗口,所以这里我是自己的理解对官方文档的一个补充。
更新项目文件
设置TargetFramework到
netcoreapp3.0
:<TargetFramework>netcoreapp3.0</TargetFramework>
删除Microsoft.AspNetCore.All或Microsoft.AspNetCore.App元包的任何
<PackageReference>
。将
<PackageReference>
元素中剩余的Microsoft.AspNetCore.*
程序包更新到当前的预览版中 (例如,3.0.0-preview3.19128.7)。如果没有对应的 3.0 版本的包,则说明包可能会在 3.0 中弃用。 其中许多之前都属于
Microsoft.AspNetCore.App
并且不需要单独引用的包,如上面我遇到的问题,关于SQL Server的EF相关的包。 具体的不再在 3.0 中生成的包的列表,请参阅aspnet/AspNetCore #3756。某些程序集已从2.x和3.0之间的Microsoft.aspnetcore.app中删除。如果您正在使用aspnet/AspNetCore #3755中列出的包中的API,则可能需要单独添加到。
例如,
Microsoft.EntityFrameworkCore
和System.Data.SqlClient
不再属于Microsoft.AspNetCore.App
得一部分。 Microsoft.aspnetcore.app中的程序集列表尚未定稿,将在3.0 RTM之前更改。添加Json.NET 支持。
项目默认为 ASP.NET Core 3.0 或更高版本设置为进程内承载模型。 当然,如果其值为
InProcess
您还可以通过删除<AspNetCoreHostingModel>
元素,来进行修改。
Json.NET 支持
作为提高 ASP.NET Core 共享的框架工作的一部分, Json.NET已从 ASP.NET Core 共享框架中删除。
若要在 ASP.NET Core 3.0 项目中使用 Json.NET:
更新
ConfigureServices
调用AddNewtonsoftJson()
。services.AddMvc()
.AddNewtonsoftJson();
Newtonsoft 的个性化设置可以设置为AddNewtonsoftJson
:
services.AddMvc()
.AddNewtonsoftJson(options =>
options.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver());
HostBuilder 替换 WebHostBuilder
使用 ASP.NET Core 3.0 模板泛型宿主。 早期版本使用Web 主机。 下面的代码显示了生成 ASP.NET Core 3.0 模板Program
类:
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>();
});
}
下面的代码演示模板生成 ASP.NET Core 2.2Program
类:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
IWebHostBuilder 将保留在 3.0,是一种webBuilder
上面的代码示例所示。 WebHostBuilder 将在未来版本中弃用并替换为HostBuilder
。
从WebHostBuilder
到HostBuilder
最显著的变化是依赖关系注入 (DI)。 使用时HostBuilder
,只能将IConfiguration并IHostingEnvironment注入到Startup
的构造函数中。 HostBuilder
DI 约束:
- 使DI容器只能构建一次。
- 避免产生的对象生存期问题,例如解决多个单例实例。
更新 SignalR 代码
如果您调用AddJsonProtocol
,将其替换为AddNewtonsoftJsonProtocol
。
以下示例显示更改前后的服务器代码:
services.AddSignalR(...)
.AddJsonProtocol(...) // 2.2
services.AddSignalR(...)
.AddNewtonsoftJsonProtocol(...) // 3.0
以下示例显示更改前后的.NET客户端代码:
connection = new HubConnectionBuilder()
.WithUrl(...)
.AddJsonProtocol(...) // 2.2
.Build()
connection = new HubConnectionBuilder()
.WithUrl(...)
.AddNewtonsoftJsonProtocol(...) // 3.0
.Build()
选择启用运行时编译
在 3.0 中,运行时编译是可选的方案。 若要启用运行时编译,请参阅ASP.NET Core 中的 Razor 文件编译。
总结
感觉微软在努力实现ASP.NET Core的模块化,减小各种依赖,让包变得更小。同时ASP.NET Core也已经很完善了,大伙是时候用起来ASP.NET Core了。另外需要说明的一点是,大伙如果是为了体验ASP.NET Core3.0的话,现在就可以,如果是用在生产环境的话最好还是等待正式版的发布吧。
从ASP.NET Core2.2到3.0你可能会遇到这些问题的更多相关文章
- 一步一步带你做WebApi迁移ASP.NET Core2.0
随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP ...
- Asp.net Core2.0 缓存 MemoryCache 和 Redis
自从使用Asp.net Core2.0 以来,不停摸索,查阅资料,这方面的资料是真的少,因此,在前人的基础上,摸索出了Asp.net Core2.0 缓存 MemoryCache 和 Redis的用法 ...
- 在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制
Swashbuckle.AspNetCore3.0 介绍 一个使用 ASP.NET Core 构建的 API 的 Swagger 工具.直接从您的路由,控制器和模型生成漂亮的 API 文档,包括用于探 ...
- 【翻译】asp.net core2.0中的token认证
原文地址:https://developer.okta.com/blog/2018/03/23/token-authentication-aspnetcore-complete-guide token ...
- Centos7 编译安装 Nginx Mariadb Asp.net Core2 (实测 笔记 Centos 7.3 + Openssl 1.1.0h + Mariadb 10.3.7 + Nginx 1.14.0 + Asp.net. Core 2 )
环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7-x86_64-Minimal-1611.iso 安装步骤: 1.准备 1.0 查看硬 ...
- 【转】Asp.Net Core2.0获取客户IP地址,及解决发布到Ubuntu服务器获取不到正确IP解决办法
1.获取客户端IP地址实现方法(扩展类) using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.ModelBinding; u ...
- [翻译]在asp.net core2.0 OpenID Connect Handler中丢失了声明(CLaims)?
注:这是一篇翻译,来自这里.这篇文章讲述了在asp.net core2.0中使用openid connect handler的过程中解析不到你想要的claim时,你可以参考这篇文章. Missing ...
- Asp.Net Core2.0获取客户IP地址,及解决发布到Ubuntu服务器获取不到正确IP解决办法
1.获取客户端IP地址实现方法(扩展类) using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.ModelBinding; u ...
- VS2017创建一个 ASP.NET Core2.0 应用,并搭建 MVC 框架
https://testerhome.com/topics/11747 1.使用最新版本的VS2017,并安装.NET Core2.0中相关开发工具 2.打开VS2017,点击文件-新建-项目,选 ...
随机推荐
- yii2.0 app上集成支付宝支付
1.首先从支付宝官网下载支付宝app支付sdk 地址 : https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.hLEa5O&a ...
- 解决centos7 python3 上下左右变ABCD
首先:rpm -qa | grep readline //查看有没有安装readline-devel(出现标题的问题就是因为没有安装readline-devel包) 其次:使用yum search r ...
- 高性能Server---Reactor模型【转载】
原文链接:http://www.ivaneye.com/2016/07/23/iomodel.html 无处不在的C/S架构 在这个充斥着云的时代,我们使用的软件可以说99%都是C/S架构的! 你发邮 ...
- 如何把word中的图片怎么导出来呢?
在办公使用word的过程中你可能经常会遇到这个问题:插入到word中的图片找不到导出来的方法,是不是很郁闷呢,别急,今天咱们研究一下把word中的图片导出来的方法(把"我的"变成你 ...
- distinct的用法
1. Distinct 位置 单独的distinct只能放在开头,否则报错,语法错误 例:SELECT Sid,DISTINCT(Sscore) score from t_student; [SQL ...
- redis结合自定义注解实现基于方法的注解缓存,及托底缓存的实现
本次分享如何使用redis结合自定义注解实现基于方法的注解缓存,及托底缓存的实现思路 现在的互联网公司大多数都是以Redis作为缓存,使用缓存的优点就不赘述了,写这篇文章的目的就是想帮助同学们如 ...
- BZOJ_3191_[JLOI2013]卡牌游戏_概率DP
BZOJ_3191_[JLOI2013]卡牌游戏_概率DP Description N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随 ...
- [Usaco2005 nov]Grazing on the Run 边跑边吃草 BZOJ1742
分析: 首先,连续选择一段必定最优... 区间DP,f[i][j]表示从i开始,连续j个被吃掉了,并且,牛在i处,g[i][j]则表示在i+j-1处 f[i][j]可以从g[i+1][j]和f[i+1 ...
- resteasy简单实例
1.建一个maven web项目 新建一个maven项目,next,第一个框不要勾选 选择maven-archetype-webapp,建一个web项目 键入项目组织id与项目id 一般此时搭建的只是 ...
- Ubuntu 18 安装chrome
1.下载chrome文件 32位使用如下命令 wget https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb ...