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

non*_*ion 23 c# visual-studio visual-studio-2017 c#-8.0

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

小智 9

添加到series0ne关于主要版本的评论:的确,新的VS通常带有新的C#版本。但是,根据过去的经验,可以通过将“ Microsoft.Net.Compilers” Nuget软件包升级来将VS的早期版本升级为C#代码的较新版本。您可以参考这篇文章以获取更多信息。如何在Visual Studio 2015中使用c#7?


Ste*_*edy 9

展望未来,Microsoft希望比过去更紧密地将C#语言版本与框架版本联系在一起。他们确实只希望您将C#8与.NET Core 3.x和.NET Standard 2.1项目一起使用,这意味着要使用Visual Studio2019。我对C#8是否支持.NET Framework的回答包含所有血腥细节。

但是,如果你真的想在Visual Studio 2017年现在可以使用C#8使用同样的伎俩带来C#7到Visual Studio 2015:安装最新版本的Microsoft.Net.Compilers NuGet包到项目中。它可以工作,但是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>
Run Code Online (Sandbox Code Playgroud)

--

using System;

namespace CSharp8Test
{
    public class Class1
    {
        public string? NullableString { get; } = "Test";

        public static void Test()
        {
            Console.WriteLine(Test2());
            static int Test2() => 5;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


M.H*_*san 6

您可以使用Microsoft.Net.Compilers.Toolset而不是Microsoft.Net.Compilersvs2017

此包旨在替代Microsoft.Net.Compilers(仅适用于 Windows 的包)和 Microsoft.NETCore.Compilers。这些包现在已弃用,将来会被删除。

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

软件包版本:

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

  • 版本 3.0 包括 C# 8.0(Visual Studio 2019 版本 16.0)的预览版,但预览版使用了 2.11。
  • 版本 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>
Run Code Online (Sandbox Code Playgroud)