.NET Core使用哪个C#版本?

22

希望你只是措辞不准确。C#版本和.NET版本几乎是相互独立的:我可以使用.NET3.5编译C#7.2编写的代码,也可以使用.NET4.7.2编译C#3编写的代码。你能做什么主要取决于Visual Studio版本(因此:编译器)。 - Robert Tausig
3个回答

20

.NET Core 2.0引用了Roslyn 2.3,它对应于Visual Studio 2017版本15.3并支持C# 7.1。

注:Roslyn是.NET编译器和代码分析器的开源实现。

这句话的意思是,如果我使用VS 2017 15.3版本,那么所有项目都会使用C#7.1吗? - Alexan
4
每个项目都有一个LangVersion设置,默认值为“default”,表示“最新的主要版本”(在这种情况下为C# 7.0)。如果您想使用次要版本,例如C# 7.1,则需要更改该设置。有关更多信息,请访问http://dontcodetired.com/blog/post/Using-C-71-Features。 - Julien Couvreur
@svick 这显然是 Core 版本故意这样设计的。这没关系,因为 Core 会重新分发/复制编译器二进制文件。尽管如此,很快就会有更好的设计方案。我不确定哪个问题跟踪了这个问题,但我认为它与这项工作有关:https://github.com/dotnet/roslyn/issues/16717 - Julien Couvreur
我可以通过dotnet cli检查支持的c#版本吗?是否有关于dotnet core中c#语言支持的路线图? - tpx86
2
@tpx86 我认为没有一种方便的方法可以从dotnet cli中查看C#编译器的版本或支持的语言版本。 我在我的电脑上找到的最好的方法是这样的:dotnet exec "c:\Program Files\dotnet\sdk\2.2.0-preview1-007622\Roslyn\bincore\csc.dll" -langversion:?。 这可能是一个值得关注的cli问题/请求。 - Julien Couvreur
显示剩余2条评论

13

C#的版本历史页面列出了所有版本及其关联的Visual Studio和.NET Core版本:

  • C# 7.3 Visual Studio 2017版本为15.7,在.NET Core 2.1 SDK 2.1.300 RC1中
  • C# 7.2 Visual Studio 2017版本为15.5,在.NET Core 2.0 SDK中
  • C# 7.1 Visual Studio 2017版本为15.3,在.NET Core 2.0 SDK中
  • C# 7.0 Visual Studio 2017和.NET Core 1.0及更高版本

截至2019年7月3日,C# 8.0仍处于预览状态。

您还可以使用此命令查看SDK版本:

dotnet --info

样例输出:

.NET Core SDK (reflecting any global.json):
 Version:   2.1.300
 Commit:    adab45bf0c

Runtime Environment:
 OS Name:     Mac OS X
 OS Version:  10.13
 OS Platform: Darwin
 RID:         osx.10.13-x64
 Base Path:   /usr/local/share/dotnet/sdk/2.1.300/

Host (useful for support):
  Version: 2.1.0
  Commit:  caa7b7e2ba

.NET Core SDKs installed:
  2.1.300 [/usr/local/share/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.1.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]

3
根据Microsoft .net core的更新页面,.NET Core 2.0支持C#7.1版本,增加了许多新功能,包括:
  • async关键字可以在应用程序入口点Main方法中使用。
  • 元组名称可以推断出来。
  • 默认表达式。
您也可以查看C#语言版本控制页面. 编译器根据以下规则确定默认值:

.NET Core 2.x C# 7.3


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