`

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

阅读更多

 

很多.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,整体架构如下图:

http://img2.mukewang.com/5e4bd8bd0001a75606510377.jpg 

.NET Core性能提升

1.TechEmpower机构

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

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

http://img4.mukewang.com/5e4bd8cc000150fc10120338.jpg 

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

http://img3.mukewang.com/5e4bd8f500019cda07510834.jpg

http://img.mukewang.com/5e4bd8f50001a41905410326.jpg

性能测试工具:

微软出品: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

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

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

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

http://img4.mukewang.com/5e4bd9120001f43e11190057.jpg

http://img1.mukewang.com/5e4bd91200017c1012860181.jpg

.NET Standard Versions

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

http://img1.mukewang.com/5e4bd92000019a7906490260.jpg

迁移方案制定

微软官方《组织项目以支持 .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/

结果图如下:

 

http://img.mukewang.com/5e4bd9480001df5306800334.jpg

http://img1.mukewang.com/5e4bd9480001471710450512.jpg


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

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 库有效。

http://img1.mukewang.com/5e4bd9570001f68c06870193.jpg 

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

http://img4.mukewang.com/5e4bd96000014ede03060218.jpg

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,具体代码参考下面

http://img3.mukewang.com/5e4bd9720001605205850543.jpg

参考:

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

地址:https://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA==&mid=2654072516&idx=3&sn=af3916ec4e2c31c231f5f01be75712d8&chksm=80dbca91b7ac43870a3fa4dce10f5a97adf1548d1381a99f27972c67c00a1e593aa926b110ad&mpshare=1&scene=23&srcid=0311kxbJ5rwkIYu7xO2Yx08U

【微软官方】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

 

分享到:
评论

相关推荐

    Pro C# 7: With .NET and .NET Core

    Now in its 8th edition, you’ll find all the very latest C# 7.1 and .NET 4.7 features here, along with four brand new chapters on Microsoft’s lightweight, cross-platform framework, .NET Core, up to ...

    ASP.NET Core Application Development : Building an application in four sprints

    ASP.NET Core Application Development: Building an application in four sprints (Developer Reference) By: James Chambers; David Paquette; Simon Timms Publisher: Microsoft Press Active Server Pages ASP...

    C# 7 and .NET Core: Modern Cross-Platform Development - Second Edition

    C# 7 and .NET Core: Modern Cross-Platform Development - Second Edition by Mark J. Price English | 24 Mar. 2017 | ASIN: B01N8UG78Q | 594 Pages | AZW3 | 23.26 MB Modern Cross-Platform Development ...

    Learning ASP.NET Core 2.0: Build modern web apps with ASP.NET Core 2.0, MVC

    Learn how web applications can be built efficiently using ASP.NET Core 2.0 and related frameworks Key Features Get to grips with the new features and APIs introduced in ASP.NET Core 2.0 Leverage the ...

    ASP.NET Core Identity:构建安全且灵活的用户身份验证系统

    本文将深入探讨ASP.NET Core Identity的工作原理、关键组件以及如何在实际项目中进行配置和使用。 ASP.NET Core Identity是一个功能丰富、安全可靠的身份认证系统,它为开发者提供了一套完整的用户管理解决方案。...

    《.NET之美:.NET关键技术深入解析》.张子阳

    最后,考虑到.NET框架的持续发展,张子阳先生可能会介绍.NET Core,这是一个跨平台的开放源代码版本,它保持了与.NET Framework的兼容性,但同时带来了更轻量级、高性能和灵活的部署选项。 总之,《.NET之美》是一...

    ASP.NET学习笔记

    本学习笔记将深入探讨ASP.NET的核心概念、开发工具、语法特性以及常见应用场景。 首先,ASP.NET的核心组成部分包括ASP.NET Web Forms、ASP.NET MVC、ASP.NET Web Pages和ASP.NET Core。Web Forms提供了事件驱动的...

    ASP.NET Core Identity:构建安全的用户身份验证系统

    本文将详细介绍 ASP.NET Core Identity 的核心功能、使用方法以及实际应用示例。 ASP.NET Core Identity 是一个功能强大的身份验证和用户管理框架,能够帮助开发者轻松实现安全的用户身份验证系统。通过本文的介绍和...

    .net MVC、.Net core+Linux视频教程

    .Net core:.Net core的战略意义、对比.Net Framework学.Net core、.Net core开发环境的搭建、如何在Linux下运行.Net core网站、Nginx、对比Entity Framework学Entity Framework Core、对比http://ASP.Net MVC学...

    《精通.NET企业项目开发:最新的模式、工具与方法》 代码

    《精通.NET企业项目开发:最新的模式、工具与方法》是一本深入探讨.NET平台下企业级应用开发的专业书籍,其代码库包含了大量的实例和示例,旨在帮助开发者掌握.NET框架下的高级编程技巧和最佳实践。这本书的重点是...

    .NET 微服务:适用于容器化 .NET 应用程.pdf

    .NET 微服务:适用于容器化 .NET 应用程.pdf

    ASP.NET Core 3.1中文教程.pdf

    本文档提供了 ASP.NET Core 3.1 的中文使用手册,涵盖了ASP.NET Core 的各种概念、技术和开发实践。 一、ASP.NET Core 概述 ASP.NET Core 是一款跨平台的 Web 应用程序框架,由 Microsoft 开发,允许开发者使用 C#...

    .Net开发的访问OPC服务器

    现在,随着微软的开发平台渐渐的转移到.NET框架上,好多OPC Client程序都需要建立在.NET平台上,用.NET提供的技术开发OPC Client就成为一种需求。网上很多网友都有提过,.NET开发OPC Client不外乎下面三种方法: ...

    asp.net开发常用文档

    高级主题可能包括SignalR实现实时通信、ASP.NET Core跨平台开发、Blazor构建Web应用等新技术。这些都能帮助开发者适应不断变化的Web开发环境。 总之,“asp.net开发常用文档”涵盖了从基础到高级的ASP.NET开发知识...

    ASP.NET开发典型模块大全:ASP.NET开发典型模块大全.iso

    - C#与VB.NET:作为ASP.NET的主要编程语言,C#和VB.NET的基础语法、面向对象编程和异常处理是学习的关键。 - Web Forms与MVC模式:ASP.NET提供了两种主要的开发模式,Web Forms用于传统的控件驱动开发,而MVC则更...

    .net学习笔记

    虽然 .NET 最初主要用于桌面和 Web 应用,但随着 Xamarin 和 .NET Core/ASP.NET Core 的推出,现在也可以使用 .NET 来开发跨平台移动应用。 #### 4. 游戏开发 .NET 也被广泛应用于游戏开发,尤其是在 Unity 引擎中...

    易表.net运行环境:egdvmchs.rar

    6. **兼容性**:易表.Net运行环境确保了与各种.NET版本的兼容性,从.NET Framework 2.0到最新的.NET Core,以覆盖广泛的开发和运行环境需求。 7. **错误处理与调试**:egdvmchs.exe还负责处理可能出现的错误和异常...

    asp.net实际开发笔记整理

    在ASP.NET实际开发中,开发者通常会涉及到一系列关键知识点,这些知识点构成了ASP.NET应用程序的基础架构。本笔记整理了从入门到进阶的重要概念,旨在帮助读者深入理解和掌握ASP.NET的实际应用。 首先,ASP.NET是...

Global site tag (gtag.js) - Google Analytics