浅谈从ASP.NET Core2.2到3.0你可能会遇到这些问题
 更新时间:2019年04月08日 08:53:48   作者:依乐祝  

这篇文章主要介绍了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》这篇文档,就着今天遇到的问题,所以我整理下,希望对大伙有所帮助,当然大伙也可以直接阅读微软的官方文档进行查看。但是我在阅读官方说明的时候,总感觉翻译的不是很准确,读起来很拗口,所以这里我是自己的理解对官方文档的一个补充。
我遇到的问题
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>元素,来进行修改。
作为提高ASP.NET Core 共享的框架工作的一部分,Json.NET已从 ASP.NET Core 共享框架中删除。
若要在 ASP.NET Core 3.0 项目中使用 Json.NET:
添加到包引用Microsoft.AspNetCore.Mvc.NewtonsoftJson
更新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可能会遇到的问题详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对华域联盟网站的支持!

您可能感兴趣的文章:ASP.NET Core 3.0迁移的完美避坑指南

ASP.NET
Core

相关文章
Cookies的各方面知识(基础/高级)深度了解Cookies想必所有人都了解本文将围绕Cookies基础知识(什么是Cookies/Cookies如何传递/Cookies如何存储/Cookies如何查看)Cookies高级知识/Cookie的限制等等方方面面深入了解,感兴趣的朋友可以参考下,或许对你学习cookies有所帮助 2013-02-02
ADO.NET基础知识汇总程序和数据库交互,要通过ADO.NET进行;通过ADO.NET就能在数据库中执行SQL了 。ADO.NET中提供了对不同数据库的统一操作接口(ODBC) 。另外还有一种操作数据库的接口是JDBC 2015-11-11
ASP.NET MVC中的视图生成实例分析这篇文章主要介绍了ASP.NET MVC中的视图生成的过程,以实例形式详细分析了控制器、布局与视图的操作方法与技巧,非常具有实用价值,需要的朋友可以参考下 2014-12-12
解析ABP框架中的数据传输对象与应用服务ABP框架是基于ASP.NET的Web开发框架,在ABP中应用服务将领域逻辑暴露给展现层,展现层通过传入数据传输对象参数来调用应用服务,而这里我们就来解析ABP框架中的数据传输对象与应用服务 2016-06-06
VisualStudio2019中为.NET Core WinForm App启用窗体设计器这篇文章主要介绍了VisualStudio2019中为.NET Core WinForm App启用窗体设计器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2020-04-04
IIS 浏览aspx页面出现无法显示XML页的解决方法分享这篇文章介绍了IIS 浏览aspx页面出现无法显示XML页的解决方法,有需要的朋友可以参考一下 2013-11-11
asp.net 用户在线退出更新实现代码更新用户是否在线?注销用户的话有三种情况:1.点击退出,2.会话超时,3.关闭浏览器

2010-03-03
.Net遍历窗体上控件的方法这篇文章主要介绍了.Net遍历窗体上控件的方法,通过foreach语句实现遍历窗体上的控件以及找出TextBox控件的功能,具有一定参考借鉴价值,需要的朋友可以参考下 2014-12-12
CentOS上运行ZKEACMS的详细过程这篇文章主要为大家介绍了CentOS上运行ZKEACMS的详细过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-05-05
JavaScript验证用户输入的是字符或数字及ASCII Chart应用我们可以根据onkeydown事件的event.keyCode即是ASCII Chart来判断字符或数字等,本文提供了相关键盘key对应的ASCII码,以供用户使用是参考及使用onpaste事件只能输入字符和数字防止粘贴等的,感兴趣的朋友可以了解下 2013-01-01

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。