从ASP.NET Core2.2到3.0你可能会遇到这些问题

 行业动态     |      2019-08-29 14:18

趁着假期的时间所以想重新学习下微软的官方文档来巩固下基础知识。我们都知道微软目前已经发布了.亚美国际平台官方网址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相关的包需要你自己来进行引用。

就着今天遇到的问题,所以我整理下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 版本的包,则说明包可能会在 3.0 中弃用。 其中许多之前都属于microsoft.aspnetcore.app并且不需要单独引用的包,如上面我遇到的问题,关于sql server的ef相关的包。 具体的不再在 3.0 中生成的包的列表,请参阅aspnet/aspnetcore #3756。

例如,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);

使用 asp.net core 3.0 模板。 早期版本使用web 主机。 下面的代码显示了生成 asp.net core 3.0 模板program类:

public class program
 public static void main
 createhostbuilder.build.run;
 public static ihostbuilder createhostbuilder = 
 host.createdefaultbuilder
 .configurewebhostdefaults
 createwebhostbuilder.build.run;
 public static iwebhostbuilder createwebhostbuilder = 
 webhost.createdefaultbuilder
 .usestartup startup 
}

iwebhostbuilder 将保留在 3.0,是一种webbuilder上面的代码示例所示。 webhostbuilder 将在未来版本中弃用并替换为hostbuilder。

从webhostbuilder到hostbuilder最显著的变化是依赖关系注入 。 使用时hostbuilder,只能将iconfiguration并ihostingenvironment注入到startup的构造函数中。 hostbuilder di 约束:

如果您调用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的话,现在就可以,如果是用在生产环境的话最好还是等待正式版的发布吧。