.NET项目迁移到.NET Core操作指南

  这篇文章,汇集了大量优秀作者写的关于".NET迁移到.NET Core"资料文章以及微软官方教程文档。是我在迁移公司框架项目到.NET Core.NET Standard时遇到的问题,并将相关资料整理成这篇文章。记录如何一步一步把项目迁移到.NET Core。

在此感谢这些革命前辈,填平的坑,走出的路……

.NET Core提供的特性

  1. 1.开源、免费

  2. 2.轻量级、跨平台

  3. 3.组件化、模块化、IOC+Nuget、中间件

  4. 4.高性能

  5. 5.统一了MVCWebAPI编程模型

  6. a) 比如:ASP.NET Core MVC Web API 直接或间接继承同一个基类 ControllerBase,提供可使用的API也一致化

  7. b) 比如:旧ASP.NET时代,写全局filter需要针对MVC Web API 分别编写代码,但在ASP.NET Core,直接使用一套中间件代码即可

  8. 6.可测试性

  9. 7.微服务、容器化支持

  10. 8.标准化 .NET API 规范- .NET STANDARD,整体架构如下图:

640?wx_fmt=jpeg

.NET Core性能提升

  1. 1.TechEmpower机构

  TechEmpower机构会定期对各语言主流的web框架做性能测试

  https://www.techempower.com/benchmarks/

640?wx_fmt=png

  1. 2.博客园博主、微软MVP – 杨晓东,做的 “Hello World”性能测试

  2. ASP.NET Core 1.1性能对比评测(ASP.NET,Python,Java,NodeJS)

编号

对比方

系统环境

宿主环境

测试结果(QPS

1

ASP.NET Core vsASP.NET Core

Windows

Kestrel vs IIS

45.6k vs 15.2k

2

ASP.NET Core vsASP.NET

Windows

IIS vs IIS

15.2k vs 18.2k

3

ASP.NET Core vsASP.NET

Windows

Kestrel vs IIS

45.6k vs 18.2k

4

ASP.NET Core vs Python Django

Linux

Kestrel vs uwsgi

26.7k vs 1.57k

5

ASP.NET Core vs Java Servlet

Linux

Kestrel vs Tomcat

26.7k vs 18.3k

6-1

ASP.NET Core vsNodeJS Express

Linux

Kestrel vs self host

26.7k vs 15.6k

6-2

ASP.NET Core vsNodeJS Koa

Linux

Kestrel vs self host

26.7k vs 17.5

640?wx_fmt=png

性能测试工具:

    微软出品:Benchmarks

    https://github.com/aspnet/benchmarks

其他阅读:

    是什么优化让 .NET Core 2.0性能飙升?

    .NET Core 3中的性能提升(译文)

    Java(11,12) 与 .NET Core(2.2,3.0)的性能对比测试

迁移工作量评估(API兼容性分析)

度量.net framework 迁移到.net core的工作量

可移植性分析工具:.NET Portability Analyzer

 【Cli 版本】  【Visual Studio Extension 版本】

  评估会给出类似如下报告:

640?wx_fmt=png

640?wx_fmt=png

  .NET Standard Versions

640?wx_fmt=jpeg

迁移方案制定

微软官方《组织项目以支持 .NET Framework 和 .NET Core》文章中,有介绍两种迁移方案:

方案一、将现有项目和 .NET Core 项目合并为单个项目(多目标框架)

方案二、将现有项目和新的 .NET Core 项目分离(拷贝到新项目)

通过类名、命名空间,查询API的实现信息

迁移过程中,有类库命名空间被调整,nuget归属包被调整,具体类库在.NET Core哪个版本中被实现也不是很清楚,通过下面两个查询助手,即可解决这些问题。

1、查询命名空间、类库在哪个nuget package包中定义(第一次查询比较慢)

2、查询 NET API 在各版本中实现

结果图如下:

640?wx_fmt=png

640?wx_fmt=png

类库项目、应用项目如何选择框架类型

  1. 1.如何组织一个同时面向多目标框架的 C# 项目解决方案

  2. 2..NetStandard;.netCore;FX(.NetFrameWork)之间引用关系

 .NET Standard 2.0中,我们使在 .NET Standard 库中通过一个兼容层去引用已有的 .NET Framework 的库成为可能。当然,这只对那些只使用了适用于 .NET Standard API  .NET Framework 库有效。

640?wx_fmt=png

FX引用.NetCore:不通过

.NetStandard引用.NetCore:不通过

.NetCore引用FX:通过

.NetCore引用.NetStandard:通过

.NetStandard引用FX:通过

FX引用.NetStandard:通过

具体参见:

  【译】介绍 .NET Standard -- 【原文】

  关于.net core 和 .net fx相互引用的问题

.NetStandard;.netCore;FX(.NetFrameWork)之间引用关系

  1. 3.项目支持多目标框架

支持多目标框架,并解决第三方库引用差异的问题(在 csproj 文件中指定包含条件)

目标框架名称列表 (命名全小写)

如何调试多目标框架类库?

NET Standard/Core项目使用条件判断输出多版本xml注释文档

640?wx_fmt=png

  1. 4.多目标框架中共享代码方案

1、【首选】.NET Standard,需要目标SDK支持对应的 .NET Standard 版本。

2、共享项目。直接共享了源码,只要在目标项目中指定了条件编译符,那么源码便能针对各种不同的目标框架进行分别编译。

3、[add as link]使用链接共享 Visual Studio 中的代码文件

  1. 5.条件编译符号 (命名全大写)

指令: #if #elif #else #endif ||&&!

因为目标框架提供的API不相同。故必要时可添加条件编译符号以便支持不同的运行时版本。

微软有针对各个目标框架有预定义预处理器符号,vs编译时会自动识别到这些框架条件编译符号。

.NET Framework 4.5 --> NET45

.NET Framework 4.6 --> NET46

.NET Framework 4.6.1 --> NET461

.NET Standard 1.0 --> NETSTANDARD1_0

.NET Standard 1.6 --> NETSTANDARD1_6

.NETCOREAPP 2.0 --> NETCOREAPP2_0

参考:

#if指令文档

如何将条件编译符号(DefineConstants)传递给msbuild

迁移到.NET Core,但只运行在windows平台上

使用 Windows 兼容性包将代码移植到 .NET Core

如何:将 Windows 窗体桌面应用程序移植到 .NET Core

如何:将 WPF 桌面应用移植到 .NET Core

兼容.NET Core.NET Standard API

迁移HttpHandler与HttpModule到 ASP.NET Core 中间件

.NET CORE 2.0 踩坑记录之ConfigurationManager

.NET Core/Standard 2.0 编译时报“CS0579: Duplicate 'AssemblyFileVersionAttribute' attribute”错误

  1. 1.自动生成AssemblyInfo的原理

  2. 2.解决方案:不自动创建 AssemblyInfo 文件

  3. ASP.NET Core开发之HttpContext

.net core 使用JsonConvert替代JavaScriptSerializer

ASP.NET Core 中重复读取 Request.Body 的正确姿势

JsonRequestBehaviorcore中被移除的问题

  1. 1.[ASP.NET MVC]解决"若要允许 GET请求,请将 JsonRequestBehavior 设置为AllowGet"

  2. 2.[ASP.NET Core]core中不会抛出AllowGet异常,对于DenyGet则使用[HttpPost]代替

https://stackoverflow.com/questions/38578463/asp-net-core-the-name-jsonrequestbehavior-does-not-exist-in-the-current-cont

https://stackoverflow.com/questions/8464677/why-is-jsonrequestbehavior-needed?r=SearchResults

获取ASP.NET Core中的Web根路径和内容根路径(移除的MapPath)

为什么我的会话状态在ASP.NET Core中不工作了?

由于ASP.NET Core 2.1中引入的Cookie同意和非必要cookieGDPR功能引起。(GDPR,即General Data Protection Regulation,《通用数据保护条例》)

ASP.NET4.5ASP.NET Core中共享cookies认证信息(加解密方式不一致问题)

   .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息

   开源方案:[git]idunno.CookieSharing

ASP.NET Core如何获取客户端IP地址(被移除的ServerVariables对象)

ASP.NET Core中 BuildManager.GetReferencedAssembiles() 的替代方案

1AppDomain.CurrentDomain.GetAssemblies()

2https://stackoverflow.com/questions/53989393/is-there-an-alternative-for-buildmanager-getreferencedassemblies-in-asp-net-co

  (可以正常注入使用,但是调试时会报FileNotFoundException

  640?wx_fmt=png

.NET Core 2.0迁移System.Runtime.Caching

迁移EF框架

【微软官方】从 EF6 到 EF Core的迁移系列

【微软官方】EF Core 版本升级迁移系列

修改为 ASP.NET Core 风格的应用

  按照上面的方式修改API兼容性后,框架类库可以顺利迁移到.NET Core,编译通过,代码运行也正常。但是ASP.NET Core风格的应用,其写法也是有很多变化的。具体参考下面文档:

将传统 ASP.NET 应用迁移到 .NET Core

【微软官方】ASP.NET 迁移到 ASP.NET Core教程系列

【微软官方】ASP.NET Core 版本升级迁移系列

  后续,我会再整理一篇 《ASP.NET Core 学习教程》 资源汇总的文章,目的是有条理的汇总大量优秀的ASP.NET Core知识点文章,方便大家学习和知识查找。

640?wx_fmt=jpeg

原文地址:https://www.cnblogs.com/heyuquan/p/dotnet-migration-to-dotnetcore.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Educational Codeforces Round 88 D. Yet Another Yet Another Task(巧枚举)

cf地址 **题目大意:**一个序列,你可以选择一个子段,要求去掉子段最大值后的和最大,求出这个最大值 **思路:**a[i]的范围比较小,可以通过枚举最大值,再找到最大值可以辐射的区间。经典套路了。…

Codeforces Round #607 (Div. 2) E. Jeremy Bearimy dfs + 思维

传送门 文章目录题意:思路:题意: 给你2∗k2*k2∗k个点的一棵树。定义GGG为任选kkk组不同的点,每组点的距离和的最小值。定义BBB为任选kkk组不同的点,每组点的距离和的最大值。让你求出GGG和BBB。 思路: …

EF Core 3 的 40 个中断性变更

为了修复 Entify Framework Core 中许多已发现的缺陷,微软在 EF Core 3 中引入了 40 个中断性变更。我们可以在微软文档中查看完整的中断性变更列表,本文仅列举几个主要的点。客户端查询为了突破 EF Core SQL 生成器的限制,默认只在客户端执行…

Codeforces Round #646 (Div. 2) E(贪心,bfs)

Codeforces Round #646 (Div. 2) E 题目大意: 给一棵树,每个节点有三个权值 A,B,C, (B,C为0或1),每次你可以花费 A[u] *k的代价让A子树中的任意 k 个节点交换彼此的 B ,问让所有节点的 BC 至少花费多少代价。 思路: …

Educational Codeforces Round 77 (Rated for Div. 2) D. A Game with Traps 贪心 +二分

传送门 文章目录题意:思路:题意: 给你nnn个人,每个人都有个能力值aia_iai​。让后在1−m1-m1−m的路上有kkk个陷阱,每个陷阱的范围是[li,ri][l_i,r_i][li​,ri​],伤害是did_idi​,能力值低于d…

联手微软,Docker公司将推出Docker Desktop for WSL 2

微软最新推出的 WSL 2 在架构方面发生了重大的变化:它提供了一个在轻量级 VM 中运行的真正 Linux 内核。使用真正的 Linux 内核意味着可以在 Windows 上运行 ELF64 Linux 二进制文件。对 Docker 来说绝对是利好消息,因为这意味着 Linux 版本的 Docker 可…

SP1026 FAVDICE - Favorite Dice 期望dp

传送门 文章目录题意:思路:题意: 一个n面的骰子,求期望掷几次能使得每一面都被掷到。 思路: 考虑期望dpdpdp。定义f[i]f[i]f[i]表示有iii面了,还需要多少次能到nnn面。当前是iii面,所以选到新…

Educational Codeforces Round 88 (Rated for Div. 2) E(数学)

Educational Codeforces Round 88 (Rated for Div. 2)E 题目大意: 给你n&#xff0c;k(1<k<n<5e5)&#xff0c;从1到n中选k个数组成一个严格递增序列&#xff0c;如果对任何正整数&#xff0c;依次模上这k个数&#xff0c;无论这k个数如何排列得到的答案都相同&#…

HAProxy 2.0发布,长期支持版本

HAProxy 2.0 发布了。HAProxy 是一个使用 C 语言编写的自由及开源软件&#xff0c;其提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理&#xff0c;支持虚拟主机&#xff0c;它是免费、快速并且可靠的 Web 负载均衡解决方案。包括 GitHub、Bitbucket、Stack Overflow、R…

Codeforces Round #651 (Div. 2) D

D. Odd-Even Subsequence 题目大意&#xff1a;在a数组中 保留k个数字&#xff0c;如何代价最小的多少。 代价的算法 具体看题意&#xff1a;就是k数组中 min{max{奇数下标}&#xff0c;max{偶数下标}} 解题思路&#xff1a;贪心加二分&#xff0c;二分全部的答案&#xff08…

CF1042E Vasya and Magic Matrix 期望dp + 推公式

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 将矩阵中的数放到数组里排序&#xff0c;就是一个比较明显的期望dpdpdp了。 定义f[i]f[i]f[i]表示从第iii个出发的期望得分&#xff0c;所以转移方程也比较好写了&#xff1a;f[i]∑(f[j](…

C#并发编程之异步编程(一)

写在前面C#5.0中&#xff0c;对异步编程进行了一次革命性的重构&#xff0c;引入了async和await这两个关键字&#xff0c;使得开发人员在不需要深刻了解异步编程的底层原理&#xff0c;就可以写出十分优美而又代码量极少的代码。如果使用得当&#xff0c;你可以写出具有并行化并…

简单思维dp-- Gym - 102392B

Gym - 102392B点 题意&#xff1a;Steve想要在游戏中升到 两级&#xff0c;给你s1和s2 分别为1级需要的经验和二级需要的经验&#xff0c;然后给你n给任务&#xff0c;任务在1级前和在1级后的经验不同&#xff0c;完成的时间也不同&#xff0c;在刚刚升1级时&#xff0c;所溢出…

P4316 绿豆蛙的归宿 期望dp + DAG

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 首先要发现这是一个DAGDAGDAG图&#xff0c;让后我们可以用拓扑在图上跑期望dpdpdp。 定义f[i]f[i]f[i]表示iii到nnn的期望路径长度&#xff0c;知道终止状态f[n]0f[n]0f[n]0&#xff0c;所…

程序员修神之路--高并发下如何缩短响应时间

点击上方“蓝字”带你去看小星星菜菜哥&#xff0c;请你看电影呀&#xff0c;但是得帮我一个忙好呀&#xff0c;看什么&#xff1f;哥斯拉2&#xff1a;怪兽之王看过了~X战警&#xff1a;黑凤凰看过了追龙2和黑衣人呢&#xff1f;都看过了&#xff0c;你说帮什么忙吧我一个网站…

URAL - 1732 Ministry of Truth--kmp算法的应用(kmp模板)

题目大意&#xff1a;首先给你第一串字符串&#xff08;s1&#xff09;&#xff0c;让你删到一些字母&#xff0c;变成下面的字符串(s2)&#xff0c;删除的字母会变成字符‘_’; 思路&#xff1a;用kmp算法让s1每一个单词在s1上匹配&#xff0c;从前面开始找&#xff0c;记得匹…

AtCoder Beginner Contest 194 E - Mex Min 思维

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你个长度为nnn的数组&#xff0c;让后一个mmm&#xff0c;问对于所有的0<i<n−m0<i<n-m0<i<n−m&#xff0c;求min(mex(Ai1,...,Ai2,AiM))min(mex(A_{i1},...,A_{i2},A_{iM}))min(mex(A…

从SQL Server到多数据库,微软数据库迁移全攻略

据了解&#xff0c;截止到 2022&#xff0c;云迁移市场规模将达到 1290 亿美元&#xff0c;云迁移服务市场的利润率达 26.7%。数据库作为企业迁移上云的关键环节&#xff0c;自然成为了各大云厂商关注的重点&#xff0c;除了提供各种各样的云端数据库&#xff0c;迁移服务也是云…

Gym - 100952H--H. Special Palindrome--dp整数划分(模板)

题目地址 A sequence of positive and non-zero integers called palindromic if it can be read the same forward and backward, for example: 15 2 6 4 6 2 15 20 3 1 1 3 20 We have a special kind of palindromic sequences, let’s call it a special palindrome. A…

AtCoder Beginner Contest 194 F - Digits Paradise in Hexadecimal 数位dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给一个161616进制的串NNN&#xff0c;让你求1−N1-N1−N中有多少个数有kkk个不同的数且没有前导零。 思路&#xff1a; NNN很大&#xff0c;有2e52e52e5了&#xff0c;那么就比较明显是个数位dpdpdp了。首先…