微软尽力保证.NET Framework开发人员的技术投资不被浪费,从而让他们可以快速地迁移到.NET Core开发上。但是.NET Core相对.NET Framework而言是无法向前兼容的破坏性创新,也就是.NET Core不支持.NET Framework中的少数功能。这样做的好处是.NET Core可以抛开历史包袱做出突破性创新。
下面是还没有或者永远不会被.NET Core支持的.NET Framework技术。
(1)WinForms、WPF(Windows presentation foundation,Windows呈现基础)这两项技术由于和Windows平台深度耦合,是很难被迁移到其他操作系统下的,因此微软官方已经声明没有对WinForms、WPF在.NET Core中进行跨平台支持的计划。从.NET Core 3.0开始,可以在.NET Core中使用WinForms、WPF,不过在.NET Core下开发出来的WinForms、WPF程序只能运行在Windows下,不能跨平台地运行在Linux、macOS等操作系统下。和.NET Framework下的WinForms、WPF相比,在.NET Core上进行WinForms、WPF开发,可以利用.NET Core的独立部署、模块化、更高性能等特性,这些是在.NET Framework下进行WinForms、WPF开发所不具备的。
(2)ASP.NET WebForms技术已经过时,因此微软没有把它移植到.NET Core中。
(3)WCF(Windows communication foundation,Windows通信基础)的服务器端开发不被.NET Core支持,而且未来也不会被支持,只有在.NET Core中调用.NET Framework中运行的WCF服务被支持。作者个人其实一直不喜欢WCF,因为WCF太复杂,不符合框架设计的KISS(keep it simple and stupid,保持简单和傻瓜化)原则。如果仅是进行网络通信,我们完全可以使用ASP.NET Core Web API、gRPC等技术,如果想要使开发出来的系统具备有序消息、队列服务、分布式事务、限流等高级特性,也可以选用有对应功能的开源组件,而不是使用WCF这样复杂的集成框架。不过开源的魅力就在于技术的发展不再受制于官方,微软WCF团队成员马特·康纽(Matt Connew)在2019年开源了他开发的CoreWCF,用这个开源项目,开发人员就可以继续在.NET Core中使用WCF进行服务器端开发了。
(4)WF(Workflow foundation,工作流框架)不被.NET Core支持,读者可以使用开源的Workflow Core。
(5)由于.NET Remoting用的是微软的私有协议,而且性能不理想,因此在.NET Core中不被支持。我们可以用谷歌开源的gRPC作为替代品,而且在ASP.NET Core中已经内置了对gRPC项目的支持。
(6)AppDomain不被.NET Core支持。在.NET Framework中,AppDomain可以用来在进程内对代码执行进行隔离,但是AppDomain技术有很多缺陷和局限性,因此在.NET Core中不被支持。在.NET Core中,我们可以用多进程模型或者容器实现类似AppDomain的效果。
.NET Framework中还有一些Windows特有的技术,这些技术在其他操作系统下没有对等的实现,这些技术包括但不限于WMI(Windows management instrumentation,Windows管理规范)、ODBC(open database connectivity,开放式数据库互连)、Windows ACL(access control list,访问控制列表)、Code Page、Windows事件日志、Windows性能计数器、Windows注册表、Directory Services。在.NET Core中,我们可以通过Windows Compatibility Pack继续使用这些技术,但是使用这些技术开发的程序只能运行在Windows下。
.NET Core做了很多创新,因此.NET Core项目的很多结构性的东西和.NET Framework的差别很大,比如csproj文件的格式、配置文件、ASP.NET Core项目结构、ASP.NET Core项目启动代码等。不过,微软在努力保证开发人员在.NETFramework时代的技术投资不被浪费,因此在编写业务代码的时候,大部分在.NET Framework时代的知识都可以直接拿过来用。目前.NET Framework上的大部分类都已经被移植到.NET Core上,而且用法变化不大。比如,作者曾经有一个基于ASP.NET MVC技术开发的项目,将它移植到.NET Core平台下只用了半小时,项目中的代码改动非常少。
文章是袁文泽博客发布,转载请注明出处!