百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

.NET开发笔记:如何将.NET项目迁移到.NET Core

ccwgpt 2024-10-03 18:30 22 浏览 0 评论

很多.net项目在开发的时候,.net core还没有出现或者还么有成熟,如今.netcore3.1已经出现,其技术风险已经比较低,今天对项目如何迁移到.net core做一个简单的梳理,瑾做参考。

为什么要从.NET迁移到.NET Core?

.NET Core提供的特性

1.免费和最宽松的开源协议

.NET Core从属于.NET基金会,由微软进行官方支持。使用最宽松的MIT和Apache 2开源协议,文档协议遵循CC-BY。这将允许任何人任何组织和企业任意处置,包括使用,复制,修改,合并,发表,分发,再授权,或者销售。唯一的限制是,软件中必须包含上述版权和许可提示,后者协议将会除了为用户提供版权许可之外,还有专利许可,并且授权是免费,无排他性的(任何个人和企业都能获得授权)并且永久不可撤销,用户使用.NET Core完全不用担心收费问题,你可以很自由的部署在任何地方.

2.轻量级、跨平台

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

4.高性能

5.统一了MVC和WebAPI编程模型

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

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

6.可测试性

7.微服务、容器化支持

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


.NET Core性能提升

1.TechEmpower机构

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

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


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

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

地址:https://www.cnblogs.com/savorboard/archive/2016/10/17/dotnet-benchmarks.html



性能测试工具:

微软出品:Benchmarks

地址:https://github.com/aspnet/benchmarks

.NET如何迁移到.NET Core?

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

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

地址:https://www.cnblogs.com/vveiliang/p/7402409.html

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

地址:https://github.com/Microsoft/dotnet-apiport

【Visual Studio Extension 版本】

地址:https://github.com/Microsoft/dotnet-apiport/tree/dev/docs/VSExtension

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



.NET Standard Versions

地址:https://github.com/dotnet/standard/blob/master/docs/versions.md


迁移方案制定

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

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

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

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

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

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

地址:https://packagesearch.azurewebsites.net/

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

地址:https://apisof.net/catalog/

结果图如下:



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

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

地址:https://walterlv.com/post/organize-csharp-project-targeting-multiple-platforms.html

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

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


FX引用.NetCore:不通过

.NetStandard引用.NetCore:不通过

.NetCore引用FX:通过

.NetCore引用.NetStandard:通过

.NetStandard引用FX:通过

FX引用.NetStandard:通过

ASP.NET Core可以在“.NET Framework 和 .NET Core”上运行,但ASP.NET Core 3.0 以及更高版本只能在 .NET Core 中运行。

具体参见:

【译】介绍 .NET Standard

地址:https://www.cnblogs.com/jinanxiaolaohu/p/10681024.html

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

地址:https://q.cnblogs.com/q/103398/

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

地址:https://www.cnblogs.com/xiaoliangge/p/7475268.html

3.项目支持多目标框架

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

地址:https://walterlv.com/post/configure-projects-to-target-multiple-platforms.html

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

地址:https://docs.microsoft.com/zh-cn/nuget/reference/target-frameworks

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

地址:https://docs.microsoft.com/zh-cn/nuget/reference/target-frameworks

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

地址:https://blog.csdn.net/starfd/article/details/78839704


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

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

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

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

地址:https://blog.csdn.net/starfd/article/details/78839704

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指令文档

地址:https://blog.csdn.net/starfd/article/details/78839704

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

地址:http://www.voidcn.com/article/p-nsrcccet-btr.html

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

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

地址:https://docs.microsoft.com/zh-cn/dotnet/core/porting/windows-compat-pack

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

地址:https://docs.microsoft.com/zh-cn/dotnet/core/porting/winforms

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

地址:https://docs.microsoft.com/zh-cn/dotnet/core/porting/wpf

兼容.NET Core或.NET Standard API

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

地址:https://docs.microsoft.com/en-us/aspnet/core/migration/http-modules?view=aspnetcore-2.2

.NET CORE 2.0 踩坑记录之ConfigurationManager

地址:https://www.cnblogs.com/binbinxu/p/7440342.html

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

1.自动生成AssemblyInfo的原理

地址:https://www.cnblogs.com/binbinxu/p/7440342.html

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

地址:https://cloud.tencent.com/developer/article/1402303

ASP.NET Core开发之HttpContext

地址:https://www.cnblogs.com/linezero/p/6801602.html

.net core 使用JsonConvert替代JavaScriptSerializer

地址:https://my.oschina.net/idoop/blog/915555

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

地址:http://www.cnblogs.com/dudu/p/9190747.html

JsonRequestBehavior在core中被移除的问题

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

地址:https://shiyousan.com/post/635428880708292949

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)

地址:http://beidouxun.com/Articles/Details/419f4786-679c-4316-b2bb-baea26c94205

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

地址:https://www.cnblogs.com/lwqlun/p/10526380.html

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

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

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

地址:https://www.cnblogs.com/cmt/p/5940796.html

开源方案:[git]idunno.CookieSharing

地址:https://github.com/blowdart/idunno.CookieSharing

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

地址:https://www.cnblogs.com/dudu/p/5972649.html

如何获取项目依赖的所有程序集

方案一:AppDomain.CurrentDomain.GetAssemblies(),此办法不能获取到所有依赖的程序集,因为.Net有延迟加载程序集机制

方案二:适用于传统ASP.NET项目,System.Web.Compilation.BuildManager.GetReferencedAssemblies();

方案三:适用于ASP.NET Core项目,DependencyContext.Default.CompileLibraries,具体代码参考下面


参考:

AppDomain.CurrentDomain.GetAssemblies()

地址:https://www.cnblogs.com/beixing/p/3803874.html

Is there an alternative for BuildManager.GetReferencedAssemblies() in ASP.NET Core?

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

.NET Core 2.0迁移System.Runtime.Caching

地址:https://www.cnblogs.com/mantgh/p/7429551.html

.NET Core 2.0升级到3.0实战方案

地址:https://www.cnblogs.com/laozhang-is-phi/p/11520048.html

从.NET CORE2.2升级到3.0过程及遇到的一些问题

地址:https://www.cnblogs.com/roadflow/p/11711686.html

迁移EF框架

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

地址:https://www.cnblogs.com/roadflow/p/11711686.html

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

地址:https://docs.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-2.2

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

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

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

地址:链接

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

地址:https://docs.microsoft.com/zh-cn/aspnet/core/migration/proper-to-2x/?view=aspnetcore-2.2

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

地址:https://docs.microsoft.com/zh-cn/aspnet/core/migration/20_21?view=aspnetcore-2.2

相关文章:

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

地址:https://zhuanlan.zhihu.com/p/66152703

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

地址:https://blog.csdn.net/hez2010/article/details/86551299

载自:cnblog.windy

相关推荐

用Deepseek扩写土木工程毕业论文实操指南

用Deepseek扩写毕业论文实操指南一、前期准备整理现有论文初稿/提纲列清楚论文核心框架(背景、现状、意义、方法、数据、结论等)梳理好关键文献,明确核心技术路线二、Deepseek扩写核心思路...

985学霸亲授,DeepSeek也能绘6大科研图表,5分钟就出图

在实验数据处理中,高效可视化是每个科研人的必修课。传统绘图软件操作复杂、耗时费力,而智能工具DeepSeek的出现彻底改变了这一现状。本文将详解如何用DeepSeek一键生成六大科研常用图表,从思维导...

AI写论文刷屏?大学生正在丢掉的思考力

一、宿舍深夜:当论文变成"Ctrl+C+V"凌晨两点的大学宿舍,小王对着电脑屏幕叹气。本该三天前开始写的近代史论文,此刻还一片空白。他熟练打开某AI写作网站,输入"论五四运动的...

Grok在辅助论文写作上能不能既“聪明”又“可怕”?!

AcademicIdeas-学境思源AI初稿写作随着人工智能技术的飞速发展,论文写作这一学术任务正迎来新的助力。2025年2月18日,美国xAI公司推出了备受瞩目的Grok3模型,其创始人埃隆·...

大四论文沟通场景!音频转文字难题听脑AI来化解

大四学生都知道,写论文时和导师沟通修改意见,简直是“过关斩将”。电话、语音沟通完,想把导师说的修改方向、重点要求记下来,麻烦事儿可不少。手写记不全,用普通录音转文字工具,转完还得自己慢慢找重点,稍不注...

论文写作 | 技术路线图怎么画?(提供经典优秀模板参考)

技术路线图是一种图表或文字说明,用于描述研究目标、方法和实施计划。它展示了研究的整体框架和步骤,有助于读者理解研究的逻辑和进展。在课题及论文中,技术路线图是常见的一部分,甚至是一个类似心脏一样的中枢器...

25年信息系统项目管理师考试第2批论文题目写作建议思路框架

25年信息系统项目管理师考试第2批论文题目写作建议思路框架--马军老师

微信购物应尽快纳入法律框架(微信购物管辖)

符向军近日,甘肃省工商行政管理局发布《2016年上半年信息分析报告》。报告显示,微信网购纠纷迅猛增长,网络购物投诉呈上升趋势。投诉的主要问题有出售的商品质量不过关、消费者通过微信付款后对方不发货、购买...

泛珠三角区域网络媒体与腾讯微信签署《战略合作框架协议》

新海南客户端、南海网7月14日消息(记者任桐)7月14日上午,参加第四届泛珠三角区域合作网络媒体论坛的区域网络媒体负责人及嘉宾一行到腾讯微信总部座谈交流,并签署《战略合作框架协议》(以下简称《框架协...

离线使用、植入微信-看乐心Mambo手环如何打破框架

从2014年开始智能手环就成功进入人们的生活,至今已经演变出数据监测、信息推送、心率监测等诸多五花八门的功能,人们选择智能手环并不指望其能够改变身体健康情况,更多的是通过数据来正视自身运动情况和身体健...

微信私域电商运营策略与框架(微信私域怎么做)

...

华专网络:如何零基础制作一个网站出来?

#如何零基础制作一个网站出来?#你是不是觉得网站建设很复杂,觉得自己是小白,需求不明确、流程搞不懂、怕被外包公司坑……这些问题我都懂!今天华专网络就用大白话给你捋清楚建站的全流程,让你轻松get网站制...

WAIC2024丨明日上午9点,不见不散!共同探讨智能社会与全球治理框架

大咖云集,硕果闪耀WAIC2024世界人工智能大会智能社会论坛将于7月5日9:00-12:00与你相约直播间WAIC2024上海杨浦同济大学哔哩哔哩多平台同步直播探讨智能社会与全球治理框架WAIC...

约基奇:森林狼换来戈贝尔时大家都在嘲笑 他们的阵容框架很不错

直播吧5月4日讯西部季后赛半决赛,掘金将迎战森林狼,约基奇赛前接受采访。约基奇说道:“当蒂姆-康纳利(森林狼总经理、前掘金总经理&曾选中约基奇)做了那笔交易(换来戈贝尔)时,每个人都在嘲笑他...

视频号带货为什么一个流量都没有?顶级分析框架送给你

视频号带货为什么一个流量都没有?遇到问题,一定是步步来分析内容,视频号带货一个流量都没有,用另外一个意思来讲,就可以说是零播放。为什么视频号带货一个流量都没有?跟你说再多,都不如来个分析框架。1、是否...

取消回复欢迎 发表评论: