微软计划在C# for VS Code扩展中加入闭源组件惹开发者唾弃

本文主要是介绍微软计划在C# for VS Code扩展中加入闭源组件惹开发者唾弃,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

整理 | 彭慧中 责编 | 屠敏
出品 | CSDN(ID:CSDNnews)

微软负责.NET和Visual Studio的项目经理Tim Heuer在今天宣布:计划将VS Code中的C#扩展迁移到语言服务器协议(LSP)中,与此同时还伴随着闭源组件的加入。
在这里插入图片描述
消息一经发布就激起了不小的水花。不仅让开发者们群情激愤,还遭到来自Gnome、Mono和Xamarin的Miguel de Icaza的尖锐反驳:“微软将颠覆一个活跃的开源项目,强行引入一个专有扩展来继续锁定.NET,这确实令人失望”。这一操作是否会导致VS Code整体向着闭源趋势发展?微软究竟意欲何为,也给无数开发者留下了疑问。

在这里插入图片描述

C#扩展迁移至LSP已成必然?

在过去几个月里,.NET团队评估了未来将如何发展.NET工具生态系统,并将更多的功能纳入VS Code中。目前,VS Code中的C#体验是由OmniSharp(一款用于c#开发的vim插件)于8年前,通过使用当时的API和协议,将其带到VS Code中的。这一举措曾引起了很大的反响。

而今天,语言服务器协议(LSP)已经成为现代开发工具之间相互对话的标准机制。因此微软相信,将C#扩展迁移到LSP将帮助他们完成创建一个可扩展的、灵活的工具环境的目标。LSP可以轻松地将新经验整合到VS Code的C#中。

Tim Heuer表示:“为了使在VS Code中的C#体验进一步提升,我们打算将扩展转换为完全使用LSP进行通信,并将现有的OmniSharp组件也更新为以这种方式通信。我们计划创建一个新的‘LSP工具主机’组件,它同时整合了开源组件,如Roslyn和Razor,以及闭源组件,如IntelliCode。利用LSP将使我们能够为VS Code扩展中的C#带来更多创新功能,以及一些使用闭源的经验。”

“一旦LSP工具主机完成,这将成为C# for VS Code扩展的默认体验。现有的用户将能够在目前存在的开源OmniSharp系统和新的 "LSP工具主机 "之间进行选择,而后者将提供额外的体验。LSP工具主机不会被开源,但我们计划与社区进行沟通,以帮助指导我们的未来计划。”

“我们一直在与OmniSharp团队合作,未来也计划与他们以及更广泛的社区合作,以推动这一令人兴奋的.NET工具的新未来。”

在这里插入图片描述

插入专有软件惹众人非议

不少开发者对C#扩展的转移不置可否,对“闭源”的这一字眼更是感到格外刺眼。

开发者Muhammad Azeez表示:虽然VS Code中的加入了C#扩展是非常受欢迎的,但新的LSP不开源则是一个奇怪的决定。如果仅仅是关于IntelliCode,那么他们可以使LSP服务器实现可扩展且开源,并加上可选的闭源组件,如IntelliCode。正如GitHub Copilot作为一个独立的扩展,在任何地方都可以使用,也许类似的方法也可以用于VS Code中的IntelliCode,而由于Copilot的存在,或许IntelliCode在VS Code中也并不那么重要。

不少人认为微软一直遵循着他们的惯用伎俩,即:拥抱技术——将技术扩展到其他产品中——最后消灭技术。而此次举动似乎也别无二致。再此之前,微软已经注意到了C#扩展的安装量,因而不得不选择“拥抱”,然而经历这样几拨“奇葩操作”后,最终也将走向烟消云散。

开发者Gerard Smit表示:“我宁愿在Visual Studio市场上看到一个新的扩展,但我明白微软拥有C#扩展的权利,这使得新扩展的出现很难发生。我真的希望这不是微软利用其权力的行为,OmniSharp团队在这方面也有发言权。”

“同时,不仅仅是LSP服务器能实现开发工具之间的对话,LSP也被其他编辑器所实现,如Vim(https://github.com/OmniSharp/omnisharp-vim)或Emacs(https://github.com/OmniSharp/omnisharp-emacs)。我假设微软不会为这些编辑器做扩展(因为只提到了vscode-csharp),所以一旦LSP工具主机得到充分关注,OmniSharp就会慢慢消亡(特别是如果OmniSharp团队正在研究LSP工具主机的情况下)。那么这就是最后一步:消灭。”

“当微软试图通过做出不利于用户的决定来争夺短期内的权力,或在现有的市场份额上获得回报时,似乎是很可悲和短视的。”开发者Nyeogmi总结道。微软曾通过建立开放源码从开发者那里获得了大量的好感,如今却又打算走回头路,这无疑将激起大批用户的愤怒。毕竟,任何封闭的工具最终都会“日薄西山”,被开发者们唾弃。

在这里插入图片描述

微软的回应

Tim Heuer在最近的更新中,回应了关于闭源的争论:Razor和C#的LSP实现将像今天一样保持开源(Roslyn 和 Razor)。VS Code C#扩展 (ms-dotnettools.csharp) 本身也将保持开源。已经的开源部分仍然保持开源,并且在积极的开源开发中。这确保了 VS Code 之外使用 LSP 的其他人继续有权访问C#。

而这个新的主机组件是开放和封闭源代码功能之间的桥梁,我们可以同时提供两者。

尽管微软提供了这样的选择,但微软企图在闭源组件上打主意的“司马昭之心”似乎也已经败了不少用户的好感。

参考资料:https://github.com/OmniSharp/omnisharp-vscode/issues/5276

这篇关于微软计划在C# for VS Code扩展中加入闭源组件惹开发者唾弃的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/292598

相关文章

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Window Server2016加入AD域的方法步骤

《WindowServer2016加入AD域的方法步骤》:本文主要介绍WindowServer2016加入AD域的方法步骤,包括配置DNS、检测ping通、更改计算机域、输入账号密码、重启服务... 目录一、 准备条件二、配置ServerB加入ServerA的AD域(test.ly)三、查看加入AD域后的变

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

c# checked和unchecked关键字的使用

《c#checked和unchecked关键字的使用》C#中的checked关键字用于启用整数运算的溢出检查,可以捕获并抛出System.OverflowException异常,而unchecked... 目录在 C# 中,checked 关键字用于启用整数运算的溢出检查。默认情况下,C# 的整数运算不会自