如何在Visual Studio 2015中使用Roslyn C#编译器?

29

我对Roslyn有一些疑惑。

我已经安装了vs 2015社区版并在扩展性>下载编译器平台sdk中下载了,所以我创建了一个简单的控制台应用程序:hello world示例。

现在我期望在vs2015默认c#编译器和roslyn之间选择c#编译器,但我没有找到这样的选项。 因此,我的第一个问题是:如何选择c#编译器版本?

其次,我已经下载了master-roslyn并构建了它,然后我找到了csc.exe,奇怪的是,如果我启动exe,我得到c#编译器版本42.42.42.42。 ???? 对吗?

然后我跟着一些教程走,但是它们都是目的: 从文本文件或字符串变量加载源代码,分析或更改语法树,然后编译为var。

那么现在我很困惑...所以:

Roslyn到底是什么?元编译器吗?这意味着我可以像Reflection一样在运行时更改代码吗? 其次:如何使用默认csc编译器编译vs2015或选择roslyn? 第三:如果我构建一个自定义版本的roslyn,如何使用Vs2015编译我的源代码? 如何知道csc.exe是否为roslyn?没有帮助或命令行打印代号。

谢谢

3个回答

39

看起来你有一些问题:

Roslyn 是什么?

Roslyn 是 Visual Studio 2015 中新的默认编译器。如果你在 Visual Studio 2015 中构建和运行应用程序,它们会使用 Roslyn 编译器进行编译。您将能够利用仅适用于新编译器的所有新 C# 6 功能。

如果你正在使用 VS2015,则 Roslyn 已完全替代了旧编译器,据我所知,你不能在 VS 2015 中使用旧编译器。

Roslyn 还是一个平台,它允许您构建可以修改、解释和理解其他程序的程序。它并不是真的让你写代码来修改自身(尽管可能在某种程度上是可能的)。

Roslyn 的常见用例包括:

  1. 构建提供 Visual Studio 内错误和警告的代码分析器
  2. 为 Visual Studio 构建能够理解源代码的扩展。
  3. 构建其他理解或运行源代码的工具。例如:ScriptCS - 使用 C# 代码进行脚本编写。

要使用 Roslyn 进行这些操作,你需要从 NuGet 下载 Microsoft.CodeAnalysis 包。您可以使用这些包来解析代码、分析语法树、分析符号或编译代码并发出 IL。

如果你想了解更多关于 Roslyn 的知识,我已经开始了一个名为 Learn Roslyn Now 的系列,你可能会对它感兴趣。

我能替换编译器吗?

是的,您可以这样做,但我不认为这是一个好主意,除非您想要测试并贡献给Roslyn。您可以从GitHub下载Roslyn,并按照这些说明构建和运行Visual Studio内部的Roslyn。

如果按照这些说明进行操作,您将能够使用F5运行Roslyn项目。它将启动一个使用您自定义编译器的Visual Studio新实例。这就是现在Microsoft以外的人们向编译器贡献功能的方式。(以前您无法将自定义编译器部署到Visual Studio中,但他们在Visual Studio Update 1中解决了这个问题)。


我看到了你的YouTube频道,非常不错!请继续分享关于Roslyn和实际应用的例子和视频...谢谢 :),但是你知道为什么主版本的打印版本是42.42.42.42吗?有什么好的理由吗?谢谢。 - LXG
1
这是JoshVarty关于Roslyn的YouTube频道链接。他的努力非常值得称赞,内容也非常有趣。https://www.youtube.com/watch?v=wXXHd8gYqVg&list=PLxk7xaZWBdUT23QfaQTCJDG6Q1xx6uHdG - RBT
你需要从NuGet下载Microsoft.CodeAnalysis的包。这令我感到困惑,因为我认为这些包应该已经包含在VS 2015中了,但事实并非如此。 - Matt Burland
如何在VS 2015中启用C#7?我知道在LinqPad 5 beta中可以使用它,但是在VS中我无法将控制台应用程序更改为C#7模式...(快速测试:将var t = (7,2); Console.Write($"{t}");放入您的Main方法中以查看是否编译和运行:它应该输出(7, 2)。) - Matt
@Matt 不行。C# 7只能在VS 2017中启用。 - JoshVarty
@JoshVarty: 是的,与此同时我已经用上了VS2017,发现一切正常,但你必须添加以下包才能完全使用C#7:<package id =“Microsoft.CSharp”version =“4.3.0”targetFramework =“net462”/> <package id =“Microsoft.Net.Compilers”version =“2.0.1”targetFramework =“net462”developmentDependency =“true”/> <package id =“System.ValueTuple”version =“4.3.0”targetFramework =“net462”/> <package id =“TaskExtensions”version =“0.1.1”targetFramework =“net462”/>,当然在项目属性中也要选择**.NET Framework 4.62**。并显式添加引用“System.ValueTuple”。 - Matt

10

Roslyn是两个东西:

  1. 一个API,允许您查看“编译器事物”,如语法树和符号。
  2. 在#1之上实现的新csc.exe。

如果您想对编译器进行更改并使用它来构建,请查看这些说明(如果您还没有看过的话)。有几种不同的方法可以创建自己的版本的csc.exe,然后使用它来构建某些内容。但是,没有像您寻找的“选择”对话框。


1

Roslyn是Visual Studio 2015的默认编译器。因此,如果您安装了VS2015,您已经在使用Roslyn。

Roslyn是.NET编译器平台的代号,它提供开源的C#和Visual Basic编译器。该项目可在github上找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接