本文要点

  • 与传统的.NET Framework相比,.NET Core平台具有显著的性能优势。

  • .NET Core在Microsoft平台之外也广为采用,并受益于强大的社区参与。

  • .NET Core在设计上采用以服务器为中心,而非聚焦于Windows。.NET Core开发受益于这种设计。

  • .NET Core现已成为一种适用于新应用开发的稳定平台。

随着.NET Core 2.0的发布,这个最初发布于2016年的平台终于有了最新的主版本,该平台具有通用性、模块化、跨平台和开放源代码的特性。.Net Core涵盖了当前.NET Framework版本中可用的很多API。其初衷是为下一代ASP.NET解决方案提供支持,但现在却已成为其它许多应用场景的基础,例如物联网、云计算和下一代移动解决方案。在本系列文章中,我们将探讨.NET Core的一些优势,以及它如何给传统.NET开发者以及所有需要为市场提供强大、高性能和经济解决方案的技术人员带来好处。

在本文中,五位资深开发人员对.NET Core平台开展做了一次探讨,内容涉及.NET Core的应用情况,以及其未来的发展方向。通过本文,读者可一窥平台的优缺点,并确定自己是否可在未来做开发时从中受益。

讨论小组成员

  • Jeff Ammons

  • Jeremy Miller

  • David Pine

  • Mark Rendle

  • Spencer Schneidenbach

InfoQ:先请大家做个简要的自我介绍,以及目前使用.NET Core的情况。

Jeff:我早在.NET Core还被称为ASP.NET vNext时就开始跟进。虽然我在2012年几乎远离了Microsoft开发,但是vNext让我重拾旧业!我从2014年开始着手宣讲Core,因为在我看来,它为服务器端/Web项目提供了一个更好的基础。

Jeremy:我牵头了多个.NET社区的OSS项目,其中部分项目的目标就是混用整个.NET Framework和NETStandard。

David:我自2015年下半年以来就一直在使用.NET Core做开发。此后在2016年1月,我开始做PoC(概念验证,Proof-of-Concept)应用。从那时起,我们整个团队一直在积极使用.NET Core做开发。我们借助ASP.NET Core构建企业Web应用。在当时,它还被称作ASP.NET 5,依赖于.xproj文件格式和project.json。我认为自己是一名.NET Core的早期采用者,非常高兴看到.NET Core的发展。同样,我对开发者社区心存感激,正是社区帮助该Microsoft产品定型发展,并使其发展超出人们的预期。我相信NET Core只会变得更好。

Mark:我从开始就是一位.NET用户,并自第一次预览版发布以来就在持续使用.NET Core,当时它被称为Project K。我一直为团队和组织提供培训课程和咨询,其中包括.NET Core本身,以及其开放的新生态系统,诸如Linux、Docker、Kubernetes等。我目前正在开发关于使用ASP.NET Core构建云原生应用的一系列在线课程。

Spencer:我曾在一些新建的项目中使用了.NET Core,这些项目主要是将ASP.NET Core用做React-Redux应用的后端。我还召集了数次ASP.NET Core的研讨会,其中一次是聚焦于Angular,还有一次是聚焦于ASP.NET Core本身。它们均可由.NET Core提供支持!

InfoQ:你们喜欢.NET Core的哪些强大之处?

Jeff:每次我在做关于Core的演讲中,该问题都会被问及。例如,“作为一名Windows开发人员,我为什么要关心跨平台问题?”。答案就在于性能上的考虑。最初,.NET是在单台Windows计算机上针对单用户做的优化。与针对多台服务器上的大量用户做了优化的技术(例如Node等)相比,.NET如果仅绑定于Windows并面向单一用户,那么其将难以在多用户服务器环境中创建超高性能的应用。Core使得Microsoft得以将开发基础重置为以服务器为中心的模式。

Jeremy:我个人最喜欢之处在于它是跨平台的。我能够将.NET Core的大部分开发工作移植到其它操作系统上。虽然简化csproj文件格式正的确是朝正确方向迈出的一大步,但我仍希望.Net Core能够保持更简洁的project.json格式。dotnet cli工具是我编写的书中的一个亮点。相比以往而言,它极大地简化了OSS工具脚本的构建,最终以简洁的命令行工具启动和管理项目文件。改进的Nuget工具结合了更好的csproj文件格式,这极大地降低了我们在上一代经常会碰到的Nuget和Visual Studio.Net的合并冲突问题,无需诉诸于Paket这类大多数开发人员不太了解的工具。

David:很明显,.NET Core的开源、跨平台和卓越性能会受到大多数开发人员的喜爱。 但我的喜欢之处在于.NET Core依然是.NET。如果你曾经在.NET中做过开发,尤其是使用过C#,那么你就会接触到那些优秀的工具、令人叹为观止的社区,以及世界上最强大的编程语言之一。我相信.NET Core对Microsoft而言是迈向正确方向的一步,这对于所有的框架开发人员来说尤为重要。开放源码和跨平台应该成为标准。开发人员可以对C#语言或者是.NET Core中的一项功能做出贡献,并产生影响,这是Microsoft所取得的一项令人难以置信的成就。赋予开发人员阅读源代码、设计实现和运作内部架构的能力是非常有必要的。为此,我向Microsoft脱帽(“红帽子”,Red Hat)致敬。

Mark:.NET Core的强大之处主要在于跨平台支持。事实上,你可以开发一个运行在Windows或Linux上的独立应用,或者使用macOS开发可在x86和ARM CPU上运行的应用,这一点令人惊叹。最重要的是,由于采用了正确的开源发展方式,我们已经看到了由社区给出的一些惊人贡献。这使得其性能得到了改善,尤其是在网络方面,并且还有更多的改进即将推出。我们可以在继续使用C#以及一些熟悉的框架和库的情况下,获得所有这些现代优点,这是非常美妙的事情。

Spencer:跨平台绝对是.NET Core的最大卖点和最大优势。我先前曾提出过这一观点,即.NET Core旨在吸引下一代的开发人员,而非那些目前使用.NET Framework的开发人员。但是,随着.NET Core中添加了越来越多的功能(例如System.Drawing和System.DirectoryServices等,不胜枚举),我想我们会看到更多的.NET开发人员和商店转移到.NET Core。

InfoQ:目前.NET Core中是否还存在一些缺点,这些缺点是你们希望在未来能得到改进的?

Jeff:一些重要遗漏将会随时间的推移而得到添加。在过去一年中,改善就非常显著。去年秋天之前,Core的巨大弱点在于.NET、ASP.NET和Visual Studio团队之间的脱节问题。但是在秋季发布之后,团队的脱节问题得到了解决,这才使我可以向其他人推荐使用Core做开发。另一个很好的例子是project.json转换为*.csproj的彻底失败。但是该过程的变化过晚,因此对于早期创建生产项目的人而言,这无疑是一种惩罚。我们需要Core能达到一个稳定的高度,才可以认真地考虑着手采纳的问题。

Jeremy:在我看来,如果开发人员需要直接编辑csproj文件,那么目前的文件格式仍然过于繁琐。为消除一些MSBuild内部关注的问题,同时将文件格式推向用户友好的方向,Core在工具和文件格式方面还存在着一定的改进余地。我非常希望看到能推出AssemblyLoadContext概念,并以此作为曾经的AppDomain模型的一个轻量级继任者。

David:当前,.NET Core的一个主要弱点就是随之而生的一些误解。无数的开发人员仍然在问,“.NET Core、.NET Standard和.NET Framework有什么区别?”。类似问题还包括,开发人员应该选择哪一个,以及为什么。选择并非总是那么简单或清楚。例如,实际上可能存在以.NET Framework为目标的.NET Core应用。这样的应用的确可能会令人困惑,因为我们知道.NET Framework和.NET Core都是.NET Standard的运行时实现。.NET Core的术语被重载,存在.NET Core应用、.NET Core CLI、.NET Core SDK和.NET Core运行时。我相信,在使所有这些术语更易于理解和使用的方面上还有很大的提升空间。

Mark:Core在性能方面还有一些工作要做。例如,在TechEmpower“纯文本”基准测试中,ASP.NET Core的Web服务器Kestrel表现极佳;但在涉及数据库查询等的高级测试中,Kestrel则表现不佳。在性能方面上,大部分从完全(full-fat).NET Framework迁移过来的代码都可以得到很大的改进。好消息是,现在人们正在深入研究代码,并挖掘这些性能问题。

Spencer: Core缺乏一些与.NET Framework相匹配的功能。这意味着当前的.NET开发人员在尝试.NET Core时,必须要决定.NET Framework的某些核心功能是否值得弃用。如果你正在使用System.Drawing、System.DirectoryServices,或是某些仅针对.NET Framework的框架,那么你就不会那么好运了。ASP.NET Core已经是一个非常成熟的产品,从ASP.NET MVC/Web API转向非常简单,但并非所有的事情都是如此。例如,Entity Framework 6到EF Core的转换就并非易事。

InfoQ:如果现在你要为组织启动一个新项目,你会选择.NET Core而非.NET Framework吗?原因是什么?

Jeff: 是的,我就是这样做的!服务器端性能是我做出选择的一个主要原因。另一个主要原因是MVC和WebAPI控制器的整合。对我而言,具有两个独立的代码库是毫无意义的。第三个原因是标签助手(Tag Helpers)。我希望我的HTML看上去尽可能更像是HTML。我一向不喜欢@Html.ActionLink(“Which param is this”, “Or this”, “Wait What Is This One Again”, new { @class = "OhComeOnYouMustBeKidding"})这样的风格。

添加CSS类绝对是一个最好的做法。我非常喜欢这样的风格:

<a asp-controller=”book” asp-action=”edit” class=”MyCSS”>Edit</a>

Jeremy:当然是的,并且我们已经这样做了。主要原因在于.NET Core对于更多的主机和开发选项而言是跨平台的。

David:我会选择.NET Core而非.NET Framework。对我来说,这个选择非常简单,因为我没有开发任何新的WinForms、WPF、WCF或ASP.NET WebForms应用。我很高兴使用Microsoft提供的最新的、最伟大的技术。到目前为止,我唯一期望的就是能看到即将推出的SignalR。在我看来,进步是直截了当的,这是朝着正确方向迈出的一步。我唯一关心的问题是关于.NET Core的可用性。只有一个选项是有点令人沮丧。事实上,我宁愿Microsoft只是声明我们现在需要全部使用.NET Core,并且可以具有以.NET Framework为目标的TFM(目标框架名字对象,Target Framework Moniker)。

Mark:对于一个新的项目,我绝对会默认使用.NET Core。最显著的原因在于.NET Core应用性能的提高和占用空间的减少,这意味着无论是对于云还是私有数据中心,可真正做到在基础架构上的成本节省。我主要从事Web和后端服务开发,能够使用Docker和Kubernetes等容器编排工具跨平台开发和部署应用,这是一项真正的优势。对于具有WPF、UWP或Xamarin移动组件的混合项目,使用.NET Standard可让开发人员在整个.NET或Xamarin项目与.NET Core Web或服务项目之间共享软件包。

Spencer:我的组织在.NET Framework上运作得很好,所以现在可能不会考虑.NET Core。但是我们希望在某个时候重新开发我们的平台。我们届时将会认真地考虑.NET Core。不必被锁定到基于Windows的托管,这是一件非常好的事情,但当前对我们并不是一个大问题!

InfoQ: 你们认为.NET Core的发展是否会超越Microsoft之外,还是会继续局限在现有的.NET开发者社区中?

Jeff:我希望如此。这是Microsoft首次有机会必须面对新一代的Web开发人员,这些开发人员认定必须使用Mac做开发。我在课堂上以VS Code入手讲授Core。尽管我越来越喜欢Code,但毫无疑问,完整的Visual Studio具有更高的生产率。目前为止在深入学习了ASP乃至Core之后,大多数从Mac或Linux入手的学员都会转向使用Windows。我们希望能改进非Windows、非Visual Studio开发人员的体验。

Jeremy:如果在TechEmpower趋势图上,基于ASP.Net Core的架构能保持攀升势头,情况或许会是如此。.Net Core必须要克服数十年来存在的一些关于Microsoft开发技术和文化的陈旧观念。

David:我认为.NET Core的发展已经超出Microsoft之外。从统计数字上看,.NET Core代码库事实上每天都会接受来自于非Microsoft雇员处的Pull请求。此外,.NET基金会有1700多家公司为.NET生态系统做出贡献,具有550多个以.NET为核心的源代码库!认真想来,这非常不同寻常。如果Microsoft不公开源代码,那么这些都是不可能的做到的。.NET开发人员社区与以往一样的强大。

Mark:我很希望看到.NET Core的发展壮大,吸引更多来自于其它生态系统的开发人员。它已具有大量的社区支持,似乎主要来于已有的.NET社区,尽管我们可以看到某些行业对此展示出越来越浓厚的兴趣。三星就是一个很好的例子。该企业已经在其Tizen操作系统中采用了.NET Core。我们很高兴看到Amazon和Google也已加强了对云平台的支持,包括提供很好的SDK支持。感觉Core项目像是一个开始,即更开放的Microsoft开始更积极地参与其它的社区。我希望该项目能继续发展,使得这些社区继续与Microsoft合作。

Spencer: 很难说。我认为信任是Microsoft在开源领域中存在的最大问题,但是他们已经取得了巨大的进步。Visual Studio Code就是一个例子,它对开源软件的各个方面都已产生了重大的影响。我认为时间会证明一切。

InfoQ:你们认为.NET Core在未来两年中将会如何发展?

Jeff: 我期望Core的发展轨迹能遵循我们所见的MVC发展的同一轨迹。起初,MVC由于与Web Forms存在一些迥异之处,因此并未受到Microsoft开发人员的喜爱。之后,在开发人员勉为其难地尝试之后,他们的态度发生了转变,进而开始喜欢使用它。现在,开发人员对Core的感受也是一样的。其中的一个巨大的差异之处在于,开发人员的MVC和WebAPI上技能可以得到更多的转换,大大地超过了可转换为MVC的Web Forms技能。

Jeremy:如果在以Netstandard 2.0为目标的项目中使用旧的.Net库是切实可行的,我认为更多的开发团队最终会跳到.Net Core。目前出于项目依赖性尚未针对Netstandard的顾虑,这些团队可能会犹豫不决。

David: 我并不认为.NET Core真的有什么特别之处。随着它越来越受欢迎,它将会得到日益广泛地采用。.NET Core的工具将变得更高效、无缺陷并且更为实用,进而提高开发人员的工作效率。我相信,.NET Core将成为.NET生态系统内新开发工作的一个行业标准。在ASP.NET Core中引入更好的SPA(单页面应用,Single Page Application)实例并非我的关注点。尽管据我所知,现在已有一些JavaScriptServices代码库,可以帮助开发人员构建Angular或React之类的项目,但我还是希望Microsoft能够涉足客户端框架。Microsoft已经给出了TypeScript,因此已在朝着正确的方向推进!

Mark:现在大企业客户开始认真考虑是否可对新项目使用.NET Core,这是我们当前所处的采纳曲线阶段。这种趋势将持续下去,并有望推动更广泛的生态系统向前发展。如果看一下.NET Core、ASP.NET Core、C#等一些项目的路线图,它们已经推出了一些非常令人惊奇的进展。其中的CoreRT是我最喜欢的一个项目,它为.NET提供了AoT编译,支持开发人员构建不带运行时依赖项的独立可执行文件。这些项目也增加了对WebAssembly的支持,支持开发人员编写并编译C#代码,在浏览器中执行复杂的处理。我非常期待看到未来的发展!

Spencer:增加一些与.NET Framework相对应的特性,可能将有助于推动.NET Standard的发展。

InfoQ:大家最后再谈谈看法?

Jeff:相比于推出新特性而言,长期稳定性将成为考虑采用Core时更看重的因素。Core正在接近于此。我是“长期支持版到当前版”模式(LTS vs Current Model)的坚定支持者,这种模式正被Node、Ubuntu等使用。从一个组织的角度考虑,我需要了解是否可以押注一种技术,该技术在必须要做出重大改变之前,至少会保持3到5年的稳定期。同时,我也需要知道该技术的创新也是在稳步推进的。

Jeremy:至少在Netstandard 2之前,.NET Core的杀手级问题就是,其在从.NET OSS生态系统分离出来时,如何避免出现像臭名昭著的Python 3发行版那样的问题。要实现完整的框架和.NET Core的多目标并非易事,这可能会成为OSS开发时的一个阻碍。

David:我一直惊讶于对.NET Core或ASP.NET Core闻所未闻的.NET开发人员数量。我相信Core是新Microsoft的一部分,作为开发人员肯定是要对此亦步亦趋的。在我的全部编程生涯中,这的确将成为一个我会讲述给孙辈们的创新经历,“令人记忆犹新的是,当年Microsoft同时推出了开放源代码和跨平台。他们将其称为.NET Core,孩子们,请不要介意这个名字”。的确,这是一个激动人心的时刻!

Mark:正如大家从我的谈话中可以看出,我是.NET Core的一位忠实粉丝。如果你正启动一个新的ASP.NET项目,你应该使用Core。它与.NET非常相似,所以你能很快就开始运行。它也是稳定的,并正得到一些开源的生态系统的支持。它只会变得更好。

讨论小组成员简介

Jeff Ammons 是Code Career Academy的首席讲师,在亚特兰大周边区域讲授Microsoft Stack和Node.js网页开发。Jeff具有Microsoft MVP和Pluralsight author认证,经常在用户组、一些聚会和会议上发表演讲。他曾就职于多家不同规模的公司,任开发人员达25年以上,职位从开发人员到首席软件架构师。

Jeremy Miller 是德克萨斯州奥斯丁市的一位开发人员和软件架构师,也是多个OSS工具的作者。他的个人博客是jeremydmiller.com。

David Pine 是位于威斯康星州的Centare公司的一位技术布道师,也是一名Microsoft MVP。David喜欢在技术社区分享知识,并在一些区域性会议、用户组和技术会议上做演讲。David热衷于通过写作来分享自己的想法,并积极维护着个人博客。

Mark Rendle 是一位具有近30年行业经验的软件开发人员。他是一名自由顾问、培训师和开发人员,定期在世界各地的.NET Core、构建现代应用和服务相关的会议上演讲。可在Twitter上关注Mark。

pencer Schneidenbach 是一位居住在密苏里州圣路易斯市的软件架构师、API/集成专家,也是一名Microsoft MVP。Spencer具有个人博客。

原文地址:http://www.infoq.com/cn/articles/future-of-net-core

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

探讨.NET Core的未来相关推荐

  1. 探讨NET Core数据进行3DES加密或解密弱密钥问题

    [导读]之前写过一篇<探讨.NET Core数据进行3DES加密和解密问题>,最近看到有人提出弱密钥问题,换个强密钥不就完了吗,猜测可能是与第三方对接导致很无奈不能更换密钥,所以产生本文解 ...

  2. 《RPA、AI、.NET Core 与未来》-中国.NET开发者峰会

    未  来 第四次工业革命,催生了数字自动化劳动,RPA 与 AI 技术的融合,成为智能信息社会的重要环节.当下RPA平台主要采用.NET Framework框架,也限制了 RPA 只用于 Window ...

  3. 【洞见区块链】众专家探讨企业级区块链未来之路

    区块链技术发展至今,可谓"一半是海水,一半是火焰",唾弃者有之,钟爱者有之,疯狂者有之.区块链将去向何方.如何评判区块链系统和服务的质量.数字资产上链的问题与场景.区块链商业化进程 ...

  4. 探讨.NET Core中实现AES加密和解密以及.NET Core为我们提供了什么方便!

    前言 对于数据加密和解密每次我都是从网上拷贝一份,无需有太多了解,由于在.net core中对加密和解密目前全部是统一了接口,只是做具体的实现,由于遇到过问题,所以将打算基本了解下其原理,知其然足矣, ...

  5. 探讨.NET Core数据进行3DES加密和解密问题

    前言 一直困扰着我关于数据加密这一块,24号晚上用了接近3个小时去完成一项任务,本以为立马能解决,但是为了保证数据的安全性,我们开始去对数据进行加密,然后接下来3个小时专门去研究加密这一块,然而用着用 ...

  6. 深度探讨,共创未来 | 思爱普(SAP) 助力碧桂园实现数字化转型

    更多内容关注公众号:SAP Technical 各位可以关注我的公众号:SAP Technical 近日,碧桂园集团与思爱普(SAP)在广东碧桂园总部成功举办了一次深入而精彩的交流会,会议以房地产行业 ...

  7. github 创始人_GitHub联合创始人Scott Chacon的视频采访,探讨代码之外的未来

    github 创始人 GitHub已成为开源项目的事实存储库. 因此,我们很高兴有机会在北卡罗来纳州罗利市的All Things Open Conference上与GitHub的联合创始人和CIO S ...

  8. 对.NET Core未来发展趋势的浅层判断

    经常听到园里.NET开发人员在抱怨生态不如JAVA,想要转JAVA,所谓打不过你,我就加入你!杜兰特的思维方式固然是获取总冠军的一种方式,但是我们要关起门来问自己有没有杜兰特的实力. 用开发生态来类比 ...

  9. 【译】.NET Core 是 .NET 的未来

    为什么要翻译咧,.NET 5 都宣布在 .NET Core 之后发布咯,何不再给 .NET Core 打打鸡血,我这个 .NET Core 的死忠粉. 原文:<.NET Core is the ...

最新文章

  1. [原创].NET 分布式架构开发实战五 Framework改进篇
  2. 操作系统-南京大学(蒋岩炎)课程--操作系统上的程序
  3. Hibernate 注解映射
  4. Google SSL zz
  5. C++笔记-Stack around the variable问题解析
  6. w10电脑c盘满了怎么清理_Win10专业版电脑c盘满了怎么清理?教你一招快速清理C盘...
  7. java md5加密解密_java MD5加密解密 | 学步园
  8. python中json.dumps使用的坑以及字符编码
  9. [Javascript]js中所学知识点回顾总结
  10. Paul Graham:未来的互联网创业[转]
  11. Java 程序员常用资源网站集合
  12. js实现电子签名功能
  13. 我励志成为芸芸阿里云大使中的佼佼者 云大使社区
  14. linux pki目录,Linux目录结构和常用命令
  15. 外贸找客户软件:Email Extractor Pro 7.2.X
  16. Oracle数据库表空间整理回收与释放操作
  17. 如何快速搭建在家里(外网)也能访问的云办公云桌面系统
  18. 安卓Android、iOS移动端车牌识别OCR技术原理
  19. js 使用 canvas 绘制地图路线
  20. 物联网工程导论答案(吴功宜第2版)1-2单元

热门文章

  1. 【JS第34期】BOM-window对象
  2. prometheus python client
  3. 读取数量不定的输入数据
  4. 电热水器和插座之间的相亲故事
  5. 数学知识在游戏中的运用
  6. 响应式设计(Response Web Design)浅谈
  7. petshop4.0 详解之五(PetShop之业务逻辑层设计)[转]
  8. 使用基于Roslyn的编译时AOP框架来解决.NET项目的代码复用问题
  9. 198道K8sDocker面试真题大汇总,全网最全八股!
  10. C# 中如何一次 catch 多个异常?