趁着假期的时间所以想重新学习下微软的官方文档来巩固下基础知识。我们都知道微软目前已经发布了.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.EntityFrameworkCoreSystem.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:

  • 添加到包引用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

WebHostBuilderHostBuilder最显著的变化是依赖关系注入 (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你可能会遇到这些问题相关推荐

  1. 在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制...

    Swashbuckle.AspNetCore3.0 介绍 一个使用 ASP.NET Core 构建的 API 的 Swagger 工具.直接从您的路由,控制器和模型生成漂亮的 API 文档,包括用于探 ...

  2. ASP.NET Core2调用Azure云上的PowerBI报表展示

    在开发企业应用中,报表功能是当之无愧的重头戏,如何将数据通过合适的报表呈现出来成为每个项目人员必需面临的问题.而找到一款合适的报表往往都需要考率价格.开发.风格.支撑等因素.那么,我在这里给大家介绍一 ...

  3. ASP.NET Core2基于RabbitMQ对Web前端实现推送功能

    在我们很多的Web应用中会遇到需要从后端将指定的数据或消息实时推送到前端,通常的做法是前端写个脚本定时到后端获取,或者借助WebSocket技术实现前后端实时通讯.因定时刷新的方法弊端很多(已不再采用 ...

  4. ASP.NET Core2读写InfluxDB时序数据库

    在我们很多应用中会遇到有一种基于一系列时间的数据需要处理,通过时间的顺序可以将这些数据点连成线,再通过数据统计后可以做成多纬度的报表,也可通过机器学习来实现数据的预测告警.而时序数据库就是用于存放管理 ...

  5. ASP.Net Core2.1中的HttpClientFactory系列一

    引言: ASP.NET Core2.1 中出现了一个新的 HttpClientFactory 功能, 它有助于解决开发人员在使用 HttpClient 实例从其应用程序中访问外部 web 资源时可能遇 ...

  6. ASP.NET Core2.1 你不得不了解的GDPR(Cookie处理) - (转载)

    前言 时间一晃 ASP.NET Core已经迭代到2.1版本了. 迫不及待的的下载了最新的版本,然后生成了一个模版项目来试试水. ...然后就碰到问题了... 我发现..cookie竟然存不进去了.. ...

  7. ASP.NET Core2.1 你不得不了解的GDPR(Cookie处理)

    前言 时间一晃 ASP.NET Core已经迭代到2.1版本了. 迫不及待的的下载了最新的版本,然后生成了一个模版项目来试试水. ...然后就碰到问题了... 我发现..cookie竟然存不进去了.. ...

  8. ASP.NET.4.5.1+MVC5.0系统角色和权限讲解

    细说ASP.NET.4.5.1+MVC5.0系统角色和权限 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软 ...

  9. IIS作为ASP.NET Core2.1 反向代理服务器未说的秘密

    --以下内容针对 ASP.NET Core2.1,2.2出现IIS进程内寄宿 暂不展开讨论--- 相比ASP.NET,出现了3个新的组件:ASP.NET Core Module.Kestrel.dot ...

最新文章

  1. mapreduce工作流程_详解MapReduce中的五大编程模型
  2. 模型压缩高达75%,推理速度提升超20%,百度Paddle Lite v2.3正式发布
  3. php 去年年初和年底时间,PHP 日期与时间
  4. int true python_python基本数据类型,int, str, bool及相关操作
  5. Atitit web 之道 艾龙著 Atitit web 之道 艾龙艾提拉著v2 saa.docx Atitit web开发之道 attilax著 Web应用 1. 第1章 Web编程基础知识 (
  6. 紫微星情大全系列之紫微星
  7. vscode安装及插件安装
  8. 什么是SaaS?SaaS系统有什么特征?
  9. PyTorch中通过torch.save保存模型和torch.load加载模型介绍
  10. 部署ROS2 Bouncy版本时遇到的一些问题
  11. pythonstdin_详解Python 中sys.stdin.readline()的用法
  12. Windows 中的键盘快捷方式
  13. cv面试百问day2
  14. 基于SSM的企业财务分析报告系统
  15. 链接生成二维码( QRCode )
  16. golang中的值类型和引用类型
  17. 为什么北京人和上海人都成了“杭漂“?
  18. 机器学习——科学计算库(Numpy,Matplotlib,Pandas)
  19. Win7安装Ubuntu1804双系统
  20. 传感器实验——控制电机

热门文章

  1. kindle阅读_如何在Kindle上清除最远的阅读页面
  2. chromebook刷机_如何从Chromebook上的APK侧面加载Android应用
  3. 为什么要使用React Hooks?(5分钟实例)
  4. windows 提权 cve-2018-8897
  5. List 分页加载数据控制机制
  6. 【spring boot】8.spring boot的日志框架logback使用
  7. C# 数据结构--排序[下]
  8. WPF 实现音频播放动画控件
  9. 日志文件记录的重要性
  10. BeetleX进程服务管理组件应用