繁体   English   中英

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

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

构建C#8.0的文章指出

目前的计划是C#8.0将与.NET Core 3.0同时发布。 但是,随着我们正在开发的Visual Studio 2019的预览,这些功能将开始活跃起来。

C#8.0,.NET Core 3.0和Visual Studio之间有什么关系?

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

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

.Net版本(4.8或.net Core 3)表示框架(一组API),它位于执行编译程序的托管运行时(CLR)的顶部(以中间语言,一种汇编代码)。

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

对于C#8,诸如Async流和范围之类的语言功能需要新的框架类型,这些类型在框架的当前/早期版本中同样不存在。 新的默认接口成员需要CLR更改。 因此,这些语言功能(语法)将无法针对早期的框架和CLR版本进行编译。

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

关于Visual Studio,虽然您可以在早期版本的IDE中使用C#8编写代码并将其编译为.Net Core 3.0运行时,但您将失去大量的工具,简单性和开发人员体验。 语法高亮,完成,代码修复等工具依赖于Roslyn,后者提供丰富的代码分析API。

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

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

编辑:

回答评论问题'如何安装C#8':语言规范是作为编译器(Roslyn)实现和交付的。 请参阅Roslyn GitHub存储库 ,其中概述了如何构建,发布和安装编译器 - 无论是否安装特定的Visual Studio。

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

  • 将下一个Visual Studio与能够理解它的Roslyn编译器一起使用。 (fe 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编译器

  • 运行时 - >相应的SDK

小附录:看看对C#中新功能的支持,显然微软不会使.NET Full .NET框架(4.8及更高版本)与.NET Standard 2.1兼容。 只有.NET Core将来会继续发展。

看看C#版本的更新和C#工具 ,它提供了与Visual Studio中的项目相关的语言的良好见解。

特别是,

在此方案中选择的默认语言版本是“ 预览” 您可以访问的C#8.0功能完全基于您正在使用的编译器版本(以及.NET SDK)。 在使用将来的预览时,您可能会获得更多(或略微调整)的功能。 当您构建项目时,.NET SDK将发出警告,表示这一切仍处于预览状态。

在回答

C#8.0,.NET Core 3.0和Visual Studio之间有什么关系?

语言,SDK和Visual Studio版本之间的关系比以前更加宽松。 语言可以在任何版本中独立于.NET而发展。 这并不意味着永远都是真的。 Visual Studio也独立于语言和框架。 如果您查看Visual Studio安装程序,您将看到语言和.NET支持是可以安装的“工作负载”。 SDK提供语言功能,VS提供工具。

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

作为后续,我也很困惑在物理部署方面新的语言版本实际上是什么

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

它是作为新的Visual Studio部署的一部分部署的新程序集,还是部分网络核心sdk安装或其他部分?

SDK的一部分,见上文。 这意味着除了您的代码之外,没有任何“部署”。 无论版本如何,您的代码都针对.NET版本。 也就是说,.NET的目标版本必须存在于机器或容器上。

是否需要将C#8添加到完整框架和.NET Core?

它“不需要添加”。 此框架(4.8)和SDK(.NET Core 3.0)的较新版本附带C#8.0支持。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM