趁着假期的时间所以想重新学习下微软的官方文档来巩固下基础知识. 我们都知道微软目前已经发布了. 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.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 https://github.com/aspnet/AspNetCore/issues/3756 .
某些程序集已从 2.x 和 3.0 之间的 Microsoft.aspnetcore.App 中删除. 如果您正在使用 aspnet/AspNetCore #3755 https://github.com/aspnet/AspNetCore/issues/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 的话, 现在就可以, 如果是用在生产环境的话最好还是等待正式版的发布吧.
来源: https://www.cnblogs.com/yilezhu/p/10661161.html