C# 6.0 是否支持.NET Core,或者.NET Core 是否响应更高版本的C#?

Does C# 6.0 support .NET Core, or does .NET Core respond to higher version of C#?

我刚刚安装了 .NET Core 1.0 和 运行 示例 hello world。

  1. .NET Core 1.0 和它的默认 C# 版本有什么关系吗?
  2. 如何通过命令行实用程序知道此 .NET Core 安装的 C# 版本?

.Net Core 和完整的 .Net Framework 之间的差异更大,意思是,您将能够使用相同的语法,但您会发现 类 中的差异你 can/can 不使用,有时,以你使用它们的方式。

语言本身通常不依赖于特定的 runtime/framework,尽管某些语言功能确实需要框架功能。 (例如,由于 FormattableString 的存在,内插字符串在 .NET 4.6 上比在 .NET 2.0 上更灵活一点。)但是,有两件事需要考虑:

  • 您安装的 SDK 支持的 C# 编译器版本(dotnet cli)
  • 特定框架版本支持的 C# 编译器包的版本

SDK 开箱即用地支持 C# 6。我个人 期望 Roslyn 包的 C# 7 版本也支持 .NET Core(例如,目标 netstandard1.5),因此在执行时编译更多代码的代码应该是在这方面很好。我不知道将编译器版本绑定到 SDK 版本方面的计划是什么 - 我怀疑当 project.json 到 msbuild 的转换完成后,这会变得更加清晰。

我不知道有什么方法可以确定特定 SDK 开箱即用支持的语言版本 - 想出一系列小 类 来执行特定语言功能会相当容易当然,看看它们是否编译。更棘手的是提出使用多个版本构建但给出不同结果的代码;在连续的语言版本(至少 2-3、3-4、4-5... 不确定 5-6)之间有一些方法可以做到这一点,但它们稍微复杂一些。

.NET Core 1.0 附带 C# 6。您可以在参考资料中看到:

Microsoft.CodeAnalysis* 是 C# 编译器的 NuGet 包。版本 1.x 对应于 C# 6,2.x(目前处于测试阶段)是 C# 7。

您还可以看到对 NuGet 的这种依赖:Microsoft.NETCore.App

当 C# 7 发布时,可能可以通过将其包添加到 .NET Core 项目来使用新的编译器。