C#版本和C#工具的更新

从Visual Studio 2019 Preview 4和RC开始,我们将调整.NET工具中C#版本的处理方式。 在<cut>下阅读更多内容。


变更摘要


首先,我们添加了两个新的Language Version( LangVersion )值: LatestMajorPreview 。 它们是如何与当前支持的值列表堆叠在一起的:

Langversion意义
最新专业最新支持的主要C#语言版本
预览版最新可用预览C#语言版本
最新的最新支持的C#语言版本(包括次要版本)
ISO-1C#1.0 / 1.2
ISO-2C#2.0
3C#3.0
4C#4.0
5C#5.0
6C#6.0
7C#7.0
7.1C#7.1
7.2C#7.2
7.3C#7.3
8.0C#8.0

如果未指定LangVersion,则默认含义现在由项目的目标框架确定。 当您针对还具有相应的预览C#版本的预览框架时,该预览版本是默认的。 如果您不针对预览框架,则选择“ 最新”


C#8.0预览时的体验


以下方案说明了在C#8.0仍处于预览状态时如何解释默认的C#版本。


定位netcoreapp3.0预览或netstandard2.1预览


在这种情况下选择的默认语言版本是Preview 。 您可以使用的C#8.0功能完全基于您使用的编译器版本(以及.NET SDK)。 在使用将来的预览时,您可能会获得更多(或稍作调整)的功能。 生成项目时,.NET SDK将发出警告,提示所有内容仍处于预览状态。


定位.NET Framework


在这种情况下选择的默认语言版本是Latest 。 C#8.0功能的任何使用都是编译错误。 当遇到这些错误之一时,Visual Studio工具将提示您一个快速修复程序,该修复程序可以更改项目或解决方案的语言版本。 由于某些功能需要.NET Framework上不可用的基础类型或运行时功能,例如默认接口成员,因此在定位.NET Framework时,这些功能仍可能会出错。


多目标netcoreapp3.0预览版或netstandard2.1预览版和.NET Framework


对于netcoreapp3.0 / netstandard2.1预览目标,语言版本为Preview 。 .NET SDK会在构建时发出警告。 对于.NET Framework目标,语言版本为Latest


使用显式LangVersion


如果您显式设置LangVersion值,则将使用该值,并且忽略前面提到的默认行为。


C#8.0和.NET Core 3.0是GA时的经验


最终,C#8.0和.NET Core 3.0将以GA品质发布。 这是当时相关的LangVersion值将映射到的内容:

Langversion意义
最新的8.0
最新专业8.0
预览版尚未确定

当C#8.0为GA时,未指定LangVersion的项目将被视为最新


如果您创建了针对.NET Core 3.0预览或.NET Standard 2.1预览的C#8.0预览项目,并且未指定LangVersion,则就像选择了“ 最新”一样 。 一旦C#8.0和.NET Core 3.0为GA,在任何情况下都不会选择使用Preview


在撰写本文时,没有计划在C#8.0为GA时预览C#。 最终,将发布预览,我们将在博客上对其进行解释。


基本原理


到目前为止,Visual Studio中使用的默认C#版本等效于LatestMajor 。 这有问题,原因有两个:


  1. C#现在在Visual Studio发行周期之间发展,但是Visual Studio中的新项目仍将默认使用旧版本的C#。
  2. 对于以.NET Core 3.0预览为目标的项目,C#8.0预览是一个更好的选择,但是如果不将其以非.NET Core 3.0预览为目标,则无法使其成为默认值。

更广泛地说,随着我们发展C#并继续发布与将来的.NET Core版本保持一致的更多功能,我们希望确保您可以尽可能无缝地使用这些功能。 这也使您可以在开发生命周期的早期使用功能,从而延长了对功能的可行反馈可能影响其设计的时间范围。


预览功能的支持和兼容性


考虑支持的方式也有所不同。 为了允许在已发布的Visual Studio 2019中使用C#8.0预览功能,预览与预览版区分支持和兼容性问题。 发布的功能:


  • 完全支持并完全兼容任何C#7.3及更低版本的功能或行为。 与目前的现状相比没有任何变化。
  • 不支持任何C#8.0预览功能。
  • 从一个C#8.0预览版本到另一个C#8.0版本不存在兼容性保证。

简而言之,如果您在Visual Studio 2019中使用C#8.0预览,则从现在到C#8.0完全发布之间,某些功能和行为可能会发生变化。


骇客入侵!

Source: https://habr.com/ru/post/zh-CN443000/


All Articles