微软近日激怒了开源.NET社区,起因是它删除了开源.NET的一项旗舰功能,以提升Visual Studio 的吸引力,尤其是针对与Visual Studio颇有渊源的跨平台源代码编辑器Visual Studio Code。 好消息是微软听取了社区的声音,恢复了通过CLI支持HotReload功能。

今天早上.NET团队负责人Scott Hunter在.NET官方博客上发布了一篇文章,具体参见 https://devblogs.microsoft.com/dotnet/net-hot-reload-support-via-cli/,文章提到了的愿景是为.NET创建一个开放和充满活力的生态系统。与许多公司一样,微软正在学习平衡 OSS 社区的需求,并成为.NET 的企业赞助商。有时候微软做对了。当微软做错了,微软能做的最好的事情就是从错误中吸取教训,更好地向前迈进。

同时也透露了一个问题,微软还没有学会,如何跟一个强大的开源社区相处,这非常像美国还没有学会,如何跟一个强大的中国相处一样。 开源路上的挫折可能更快加速微软同开源社区相处,我相信微软是真的爱开源。

最近备受争议的有两个关键部分,一是GitHub上开源.NET SDK代码存储库中的这个合并请(https://github.com/dotnet/sdk/pull/22217),即从一款名为dotnet watch的工具中删除了用于实现Hot Reload(热重载)这项功能的2500行代码,今天早上已经通过这个合并恢复了(https://github.com/dotnet/sdk/pull/22262);二是这篇博文,微软首席项目经理Dmitry Lyalin在博文中透露:“我们已决定,从即将发布的.NET 6正式版开始,我们将仅通过Visual Studio 2022启用热重载功能。”,早上Scott Hunter已经宣布恢复这项功能。

https://devblogs.microsoft.com/dotnet/update-on-net-hot-reload-progress-and-visual-studio-2022-highlights/)
热重载是一项功能,开发人员可以利用该功能在应用程序运行时修改源代码、实施更改,并在运行中的应用程序中查看结果。该功能之所以可以加快开发过程,是由于它比重新构建代码、停止应用程序、实施更改后再次启动应用程序要快。
Lyalin当初在介绍重加载功能时表示,开发人员可以通过“Visual Studio 2019版本16.11(预览版1)中的.NET热重载体验和.NET 6(预览版4)中的dotnet watch命令行工具来使用它”。该功能出现在.NET 6 RC2中,该版本拥有上线(go-live)许可证,已于10月12日发布,赶在计划于11月9日召开的.NET Conf 2021线上大会上发布.NET 6之前发布。
删除热重载在这个后期阶段令人惊讶,令广大.NET开发人员颇为惊愕和失望,以至于提交了阻止这一变更的合并请求,并迅速获得了支持。一名开发人员说:“这是一场真正决定.NET是不是真是一个OSS[开源软件项目]的公关活动。”

为什么这对我们所有人都很重要?

为什么这么重要?虽然热重载是一项工具性质的功能,但这一变更的含义在于,开源.NET SDK被故意削弱功能,似乎只是为了使Visual Studio(这款商业产品附有功能缩减的免费版)比竞争对手更具吸引力,竞争对手包括微软赞助的Visual Studio Code。这次变更还是在未与开发社区通气的情况下进行的。前阵子出现了一场危机:微软成立和赞助的独立自由软件组织.NET基金会面临同一个问题:微软对.NET作为开源平台是否真的很上心?这场危机后,开发社区对此似乎见惯不怪。决定遏制热重载的可用性也似乎让外界颇感好奇。开发工具对于像微软这样的平台公司而言具有重要的战略意义:简而言之,它吸引广大程序员支持平台。谁能忘记微软前首席执行官Steve Ballmer及其在2000年微软25周年庆祝活动上呐喊的“开发人员、开发人员、开发人员”?我们尽可一笑了之;然而,知名软件行业分析公司Redmonk以“开发者是新的掌权者这一观点”作为谋生之道。
一款关键业务应用程序可以促进用户在Azure上大笔投入,而微软云是NET的自然目的地,正如谷歌云得益于这家广告公司作为Kubernetes的发明者这个地位一样。Visual Studio Code是免费的,但也是微软迄今在开发人员社区最成功的产品,VS Code中强有力地支持.NET对微软可能带来的好处远远超过对Visual Studio销售带来的任何轻微影响。
另一名开发人员说:“我是不是可以理解为这意味着在.NET 6预览版中已经与dotnet watch配合使用的热重载功能现在被取消了?现在我可以创建一个.NET控制台应用程序,使用dotnet watch运行它,更改文件,并在不重启应用程序的情况下自动重载文件。如果这项功能取消......无非是为了钱。”另一条评论问道:“如果你肆意遏制开发人员在Windows之外的平台上的体验,又怎能指望.NET会成为一种用于跨平台开发的有效解决方案?”
让一项关键的工具功能成为Visual Studio的独享功能存在另一个问题,那就是它剥夺了 macOS和Linux开发人员的这个选项,因为Visual Studio仅面向Windows。微软表示还计划为 Visual Studio Mac推出这项功能,但与VS Code相比,其用途小得多。从社区的炮轰来看,实际情况并不是微软想象的那样,有大量的开发人员工作流依赖于.NET CLI的功能,还好微软听取了社区的声音,及时改正错误。

参考资料:

微软认真聆听了开源 .NET 开发社区的炮轰: 通过CLI 支持 Hot Reload 功能的更多相关文章

  1. 微软发布了开发社区采用.NET Standard的最新信息

    最近,微软发布了开发社区当前采用.NET Standard的最新信息..NET Standard是API的正式规范,现有.NET实现在不同平台的是通用的(从而允许跨平台开发).当前规范(版本2.0)在 ...

  2. .NET Core:面向未来的开源跨平台开发技术

    作为一种全新的开源和跨平台的开发平台,.NET Core 历经两年多的开发,终于在于2016年6月27日针对所有主流服务器和桌面操作系统发布 1.0 RTM 版本..NET Core 是一种通用开发平 ...

  3. PHP 开发社区微信服务号实战图解

    本博文就月初刚上线的微信服务号,图文进行总结分享给大家. 去年年底,我所在的团队讨论要开发微信号,话题由此拉开: 原来有一个3年前注册的微信号,但是后台操作无法从“订阅号”变更为“服务号”,随即找腾讯 ...

  4. 未来-区块链-IBM:IBM 区块链技术开发社区

    ylbtech-未来-区块链-IBM:IBM 区块链技术开发社区 1.返回顶部 1. 开始学习 IBM Blockchain 101:开发人员快速入门指南 这篇快速入门指南适合不熟悉区块链技术,希望快 ...

  5. 基于STM32L4的开源NBIOT开发资料

    基于STM32L4的开源NBIOT开发资料 1. 参考路径:http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=615 ...

  6. 【2015上半年总结】js开源组件开发系列索引

    js开源组件开发系列一索引 2015.8 by 田想兵 个人网站 从3月份进入新公司以来,时经五个月,我以平均每周1个小组件的速度,已经完成的js组件有22个之余了,已基本上全部用到实际项目中,这些小 ...

  7. [js开源组件开发]network异步请求ajax的扩展

    network异步请求ajax的扩展 在日常的应用中,你可能直接调用$.ajax是会有些问题的,比如说用户的重复点击,比如说我只希望它成功提交一次后就不能再提交,比如说我希望有个正在提交的loadin ...

  8. [js开源组件开发]数字或金额千分位格式化组件

    数字或金额千分位格式化组件 这次距离上一个组件<[js开源组件开发]table表格组件>时隔了一个月,由于最近的项目比较坑,刚挖完坑,所以来总结性提出来几个组件弥补这次的空缺,首先是金额和 ...

  9. [js开源组件开发]query组件,获取url参数和form表单json格式

    query组件,获取url参数和form表单json格式 距离上次的组件[js开源组件开发]ajax分页组件一转眼过去了近二十天,或许我一周一组件的承诺有了质疑声,但其实我一直在做,只是没人看到……, ...

随机推荐

  1. File Inclusion(文件包含)

    File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_ ...

  2. php发送邮件方法-亲测可用,email.class.php过期解决办法

    php虽然提供了mail()函数,但并不好用,而PHPMailer是一个不错的邮件发送工具,使用起来也是非常简单!使用PHPMailer发送邮件: <?php header("cont ...

  3. 美团分布式定时调度框架XXL-Job基本使用

    一:XXL JOB 基本使用 1.官方中文文档:https://www.xuxueli.com/xxl-job/ 2.基本环境: 2.1:git下载项目, 执行xxl-job数据库初始化脚本 2.2: ...

  4. Jmeter扩展组件开发(9) - 解决空指针问题

    问题分析 上一节https://www.cnblogs.com/gltou/p/14967005.html功能描述内容为空,导致Jmeter报空指针 CODE List desc = new Arra ...

  5. 手把手教你 Docker搭建nacos单机版

    Docker搭建nacos单机版步骤 一.使用 docker pull nacos/nacos-server 拉取nacos镜像 我这里没有指定版本所以是拉取latest,你也可以使用 docker ...

  6. contos 7修改root密码

    https://www.linuxidc.com/Linux/2018-01/150211.htm 下面是CentOS 7的root密码修改 开机按esc 选择CentOS Linux (3.10.0 ...

  7. web带宽估算方法

    每个连接约占用10Kb的带宽,以3万总用户数和10%的在线率计算,并按照10%的冗余率,服务器总带宽=每秒总连接数*10Kbps /(1-冗余率)/1024. 带宽占用(Mbps)=30000*10% ...

  8. 腾讯首个CNCF沙箱开源项目

    作者 SuperEdge开发者.腾讯云容器产品中心边缘计算团队.腾讯开源生态管理协会 SuperEdge 进入 CNCF 沙箱 2021 年 9 月 14 日,云原生分布式边缘容器系统 SuperEd ...

  9. docker efk(filebeat+logstash+es+kibana)

    ​ 1.系统架构 ​ 通常我们说的elastic stack,也就是elk,通过es 收集日志数据,存到elasticsearch,最后通过kibana进行统计分析,但是elastic公司后续又推出了 ...

  10. java8的新特性之lambda表达式和方法引用

    1.1. Lambda表达式 通过具体的实例去体会lambda表达式对于我们代码的简化,其实我们不去深究他的底层原理和背景,仅仅从用法上去理解,关注两方面: lambda表达式是Java8的一个语法糖 ...