Roslyn是否可以作为一个C#变体(比如C2#)进行修改、重新打包和分发,只会在特定的C2#项目中启动和编译



严格从技术角度来看。

每个VS2015安装只有1个Roslyn,但有多种语言和编译器与之共存。我粗略的理解是,Visual Studio根据编辑/编译的项目类型或项类型定义,在上下文中激活正确的扩展和编译器。为Visual Studio构建语言的开发人员会开发这些定义,这些定义将与该语言一起安装到VS中。

Q1。如果语言开发人员开发了这些(定义、项目和项模板等),那么Roslyn是否可以被修改/标记为与1个真正的C#/VB Roslyn并行的另一种语言/编译器?

Q2。如果没有,这里的技术限制是什么?

Q3.如果有一个限制是Roslyn的体系结构和与VS的关系与常见的第三方语言/编译器有根本不同,那么有什么理论上的变通方法吗?例如,以与常见的第三方语言/编译器完全相同的方式包装修改后的Roslyn,使其适合VS?

这取决于您想要修改多少。

如果你保持核心层的完整性,你可以想象在C#的基础上创建第三种Roslyn语言;VB,引用原始未修改的Roslyn核心程序集并导出新的语言、文件扩展名、项目类型等。您需要完全复制Roslyn中的所有Microsoft.*.CSharp项目。

在实践中,这不太可能奏效,因为你需要继承的类型太多了;出口是内部的(并通过[InternalsVisibleTo]暴露于Roslyn自身的其他部分)。

或者,您可以将整个Roslyn代码库派生为一组全新的扩展。您需要更改所有程序集&命名空间名称,以便它们可以与原始项目并行加载,并且您需要更改每个GUID和唯一ID,以区分VS范围的导出和原始扩展。

这将是一项艰巨的工作,而且随着VS API的变化,这将给您带来很多头痛(Roslyn的编辑器和项目系统层与VS紧密耦合,使用的API不受官方支持,而且很容易发生变化)。而且在重命名中从原始上游代码库中提取更改并不容易。

最新更新