如何在 Visual Studio 2017 中使用 C# 8?

Posted

技术标签:

【中文标题】如何在 Visual Studio 2017 中使用 C# 8?【英文标题】:How can I use C# 8 with Visual Studio 2017? 【发布时间】:2019-07-09 03:03:51 【问题描述】:

我想在 Visual Studio 2017 中使用 C# 8.0(尤其是范围和不可为空的引用类型)。可以吗?

【问题讨论】:

【参考方案1】:

展望未来,微软希望将 C# 语言版本与过去的框架版本更紧密地联系在一起。他们真的只希望您将 C# 8 与 .NET Core 3.x 和 .NET Standard 2.1 项目一起使用,这意味着使用 Visual Studio 2019。我对Does C# 8 support the .NET Framework? 的回答包含所有血淋淋的细节。

但是,如果您真的想您现在可以在 Visual Studio 2017 中使用 C# 8,通过使用将 C# 7 引入 Visual Studio 2015 的 the same trick:安装最新版本的Microsoft.Net.Compilers Nuget package 进入项目。它可以工作,但当然 VS 2017 不了解 C# 8 语法,所以它看起来不太漂亮。这是一个屏幕截图,显示 VS 2017 能够使用可为空的引用类型和静态本地方法(两者都是 C# 8 特性)编译一个小型测试库:


如果您想尝试一下,这里是 .csproj 和代码:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;net452</TargetFrameworks>
    <LangVersion>8.0</LangVersion>    
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Net.Compilers" Version="3.3.1">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
  </ItemGroup>
</Project>

-

using System;

namespace CSharp8Test

    public class Class1
    
        public string? NullableString  get;  = "Test";

        public static void Test()
        
            Console.WriteLine(Test2());
            static int Test2() => 5;
        
    

【讨论】:

【参考方案2】:

添加到 series0ne 对主要版本的评论:确实,新的 VS 通常附带新的 C# 版本。但是,根据以往的经验,可以将以前版本的 VS 升级为编译更新版本的 C# 代码,主要是通过升级“Microsoft.Net.Compilers”Nuget 包。您可以参考这篇文章了解更多信息。 How to use c#7 with Visual Studio 2015?

【讨论】:

【参考方案3】:

您可以在 vs2017 中使用 Microsoft.Net.Compilers.Toolset 代替 Microsoft.Net.Compilers

此包旨在作为 Microsoft.Net.Compilers(仅限 Windows 的包)和 Microsoft.NETCore.Compilers 的 replacement。这些软件包现已弃用,将来将被删除。

该软件包需要 MSBuild 15.0 和 .NET Destkop 4.7.2 或 .NET Core 2.1

包versions:

与 vs2019 相比,包版本映射了 c# 8 支持的能力。

3.0 版包含 C# 8.0 的预览版(Visual Studio 2019 版 16.0),但 2.11 用于预览版1。 3.1 版包含 C# 8.0 预览版(Visual Studio 2019 16.1 版) 3.2 版包含 C# 8.0 的预览版(Visual Studio 2019 16.2 版) 版本 3.3 包括 C# 8.0(Visual Studio 2019 版本 16.3,.NET Core 3.0)

如何使用

将这些行添加到 .csproj

 <PropertyGroup>
     //....
    <LangVersion>8.0</LangVersion>    
    <Nullable>enable</Nullable> <!-- to support nullable reference type -->
  </PropertyGroup>

<ItemGroup>   
    <PackageReference Include="Microsoft.Net.Compilers.Toolset" Version="3.3.1" PrivateAssets="All" />
  </ItemGroup>

【讨论】:

【参考方案4】:

所以目前的信息是:

Visual Studio 2019 已发布;它不再处于预览状态。 C# 8 仍处于预览阶段 (source)。

C# 8 beta 编译器可用于 Visual Studio 2019 或最新的 .NET Core 3.0 预览版。 (source)

据此,我推断 C# 8 目前在 VS2017 中可用,并且没有计划改变它。

【讨论】:

【参考方案5】:

您还可以在 Visual Studio 2019 的任何 .NET 项目中使用 C# 8。https://dirkstrauss.com/enabling-c-8-in-visual-studio-2019/

虽然有一些限制,但这是可能的。

【讨论】:

以上是关于如何在 Visual Studio 2017 中使用 C# 8?的主要内容,如果未能解决你的问题,请参考以下文章

如何添加宏Visual Studio 2019

visual studio2017社区版如何空格操作?

Intel parallel studio 2017 集成在visual studio 2013 中,现在如何集成到visual studio 2015

如何使用Visual Studio 2013或Visual Studio 2017设置TFS 2013

如何设置 TFS 2013 以使用 Visual Studio 2013 或 Visual Studio 2017 构建

无法找到visual studio 2017生成工具