.NET开发笔记:如何将.NET项目迁移到.NET Core
connygpt 2024-11-28 08:06 13 浏览
很多.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
相关推荐
- 3分钟让你的项目支持AI问答模块,完全开源!
-
hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...
- 干货|程序员的副业挂,12个平台分享
-
1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...
- Github标星超200K,这10个可视化面板你知道几个
-
在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...
- 开箱即用的炫酷中后台前端开源框架第二篇
-
#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...
- 搭建React+AntDeign的开发环境和框架
-
搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...
- 基于.NET 5实现的开源通用权限管理平台
-
??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...
- StreamPark - 大数据流计算引擎
-
使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...
- 教你使用UmiJS框架开发React
-
1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...
- 简单在线流程图工具在用例设计中的运用
-
敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...
- 【开源分享】神奇的大数据实时平台框架,让Flink&Spark开发更简单
-
这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...
- 聊聊规则引擎的调研及实现全过程
-
摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...
- 【开源推荐】Diboot 2.0.5 发布,自动化开发助理
-
一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...
- 微软推出Copilot Actions,使用人工智能自动执行重复性任务
-
IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...
- Electron 使用Selenium和WebDriver
-
本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...
- Quick 'n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具
-
一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...
- 一周热门
- 最近发表
- 标签列表
-
- kubectlsetimage (56)
- mysqlinsertoverwrite (53)
- addcolumn (54)
- helmpackage (54)
- varchar最长多少 (61)
- 类型断言 (53)
- protoc安装 (56)
- jdk20安装教程 (60)
- rpm2cpio (52)
- 控制台打印 (63)
- 401unauthorized (51)
- vuexstore (68)
- druiddatasource (60)
- 企业微信开发文档 (51)
- rendertexture (51)
- speedphp (52)
- gitcommit-am (68)
- bashecho (64)
- str_to_date函数 (58)
- yum下载包及依赖到本地 (72)
- jstree中文api文档 (59)
- mvnw文件 (58)
- rancher安装 (63)
- nginx开机自启 (53)
- .netcore教程 (53)