C# 8.0、NET Core 3.0 和 Visual Studio 之间的关系

Relationship between C# 8.0, NET Core 3.0 and Visual Studio

文章Building C# 8.0指出

The current plan is that C# 8.0 will ship at the same time as .NET Core 3.0. However, the features will start to come alive with the previews of Visual Studio 2019 that we are working on.

C# 8.0、NET Core 3.0 和Visual Studio有什么关系?

作为后续,我也对物理部署方面的新语言版本实际上是什么感到困惑。它是作为新 visual studio 部署的一部分部署的新程序集,还是 net core sdk 安装的一部分或其他?是否需要将 C# 8 添加到完整框架和 .NET Core 中?

C# 语言包含一个规范以及称为 Roslyn 的参考编译器。

.Net 版本(4.8 或 .net Core 3)表示位于托管运行时(CLR)之上的框架(一组 API),该运行时执行已编译程序(在中间语言中,一种程序集代码)。

虽然理想情况下 C# 语言应该是平台不可知的,并且独立于框架和运行时,但在 C# 的历史上,设计了几个关键的语言功能,而当前版本的 CLR 不允许使用该功能,或者该功能基于更高级别的类型和框架添加(例如 C# 5 中的 Async-Await,以及 C# 7 中一定程度上的值元组)。

在 C# 8 中,异步流和范围等语言特性需要新的框架类型,这些类型在 current/earlier 版本的框架中同样不存在。新的默认接口成员需要 CLR 更改。因此,这些语言功能(语法)不会针对早期的框架和 CLR 版本进行编译。

与以前的语言迭代不同,Microsoft 不会在新的 .Net Framework 4.8 版中发布这些要求。相反,他们正在推动 .Net Core 3.0 作为参考平台,使他们能够更快地向前迭代。

关于 Visual Studio,而您 可以 在 IDE 的早期版本中用 C# 8 编写代码并针对 .Net 进行编译Core 3.0 运行时,您将失去大量的工具、简单性和开发人员体验。围绕语法突出显示、完成、代码修复等的工具依赖于提供丰富代码分析 API 的 Roslyn。

由于框架和语言部署不完全同步,使用 Visual Studio 预览提供(大部分)兼容的框架和语言版本来测试两者的新功能。

一个很好的参考是 Building C# 8.0 博客 post 中的“平台依赖性”部分。

编辑:

回答评论问题 'How is C# 8 installed':语言 spec 作为编译器 (Roslyn) 实现和交付。请参阅 Roslyn GitHub repository,其中概述了编译器的构建、发布和安装方式 - 有或没有特定的 Visual Studio 安装。

有两种方法可以让 C# 8.0 编译:

  • 将下一个 Visual Studio 与理解它的 Roslyn 编译器一起使用。 ( f.e。 Visual Studio 2019)
  • 安装独立的 .NET Core SDK(可用时为 3.0.0)并调用 'dotnet build'

现在构建 .NET Core 3.0.0 将需要安装相同的 SDK。

构建 .NET 4.8 需要安装 .NET Full Framework 4.8 SDK。

这两个 SDK 可能会随 Visual Studio 2019 一起提供,否则您必须稍后安装它们才能针对这些框架。

所以: - C# -> Roslyn 编译器

  • runtime -> 对应SDK

小补充:看看对 C# 中新功能的支持,显然 Microsoft 不会使 .NET Full Framework(4.8 及更高版本)与 .NET Standard 2.1 兼容。未来只有.NET Core会继续进化。

.NET Core 3 发布后更新

C# 8.0 中添加的一些功能需要 .NET Core 3.0,因此它们之间的关系比之前的 C#/.NET 更紧密。这对可以通过 VS 作为工作负载获取,但请记住 C# 8.0 和 .NET Core 3.0 不需要 VS;您可以在其他 IDE 中使用它们。

C# language versioning 文档更详细地描述了语言/.NET 关系。

有关一些实用的细节,您可以阅读如何 target C# 8.0 in Visual Studio

旧答案

看看 An update to C# versions and C# tooling,它提供了关于语言的很好的见解,因为它与 Visual Studio 中的项目相关。

特别是,

The default language version chosen in this scenario is Preview. The C# 8.0 features you have access to are based entirely on the version of the compiler (and thus the .NET SDK) that you are using. As you use future previews, you may get more (or slightly tweaked) features. When you build a project, the .NET SDK will emit a warning that this is all still in preview.

回答

What is the relationship between C# 8.0, NET Core 3.0 and Visual Studio?

语言、SDK、Visual Studio版本之间的关系比以前松散多了。该语言可以在其任何化身中独立于 .NET 进行发展。这并不意味着那将永远是真的。 Visual Studio 也独立于语言和框架。如果您查看 Visual Studio 安装程序,您会看到可以安装的语言和 .NET 支持 "workloads"。 SDK 公开语言功能,VS 提供工具。

如果您现在要使用 VS 2017,请查看

As a followup, I'm also confused as to what a new language version actually is in terms of physical deployment

它是包含可以从 C# 8.0 源代码创建程序集的编译器的 SDK。

Is it new assemblies deployed as part of a new visual studio deploy, or part of a net core sdk install or something else?

SDK 的一部分,见上文。这意味着除了您的代码之外什么都不是 "deployed" 。您的代码,无论版本如何,都以 .NET 版本为目标。也就是说,目标版本的 .NET 必须存在于计算机或容器上。

Does C# 8 need to be added to both full framework and .NET Core?

它没有 "need to be added"。此框架 (4.8) 和 SDK (.NET Core 3.0) 的较新版本支持 C# 8.0。