如何在 Visual Studio 2017 中使用 C# 8?
How can I use C# 8 with Visual Studio 2017?
我想在 Visual Studio 2017 年使用 C# 8.0(尤其是范围和不可为 null 的引用类型)。这可能吗?
添加到 series0ne 关于主要版本的评论:的确,新的 VS 通常附带新的 C# 版本。但是根据以往的经验,可以将旧版本的VS升级为编译新版本的C#代码,主要是升级"Microsoft.Net.Compilers"Nuget包。您可以参考此 post 了解更多信息。
所以当前信息是:
- Visual Studio2019已发布;它不再处于预览状态。
- C# 8 仍处于预览阶段 (source)。
The C# 8 beta compiler is available with Visual Studio 2019, or the latest .NET Core 3.0 preview. (source)
据此,我推断 C# 8 当前 在 VS2017 中可用,并且没有 计划对其进行更改。
展望未来,微软希望将 C# 语言版本与框架版本比过去更紧密地联系在一起。他们真的只希望您将 C# 8 与 .NET Core 3.x 和 .NET Standard 2.1 项目一起使用,这意味着使用 Visual Studio 2019。我对 的回答包含所有细节.
但是,如果您真的想要 ,您现在可以在 Visual Studio 2017 中使用 C# 8,方法是在项目中使用 that brings C# 7 to Visual Studio 2015: install the latest version of the 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;
}
}
}
您可以在 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
包版本映射了与 vs2019 相比的 c#8 支持能力。
- 版本 3.0 包含 C# 8.0 的预览版(Visual Studio 2019 版本 16.0),但预览版 1 使用的是 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>
您还可以在 Visual Studio 2019 年的任何 .NET 项目中使用 C# 8。https://dirkstrauss.com/enabling-c-8-in-visual-studio-2019/
虽然有一些限制,但这是可能的。
我想在 Visual Studio 2017 年使用 C# 8.0(尤其是范围和不可为 null 的引用类型)。这可能吗?
添加到 series0ne 关于主要版本的评论:的确,新的 VS 通常附带新的 C# 版本。但是根据以往的经验,可以将旧版本的VS升级为编译新版本的C#代码,主要是升级"Microsoft.Net.Compilers"Nuget包。您可以参考此 post 了解更多信息。
所以当前信息是:
- Visual Studio2019已发布;它不再处于预览状态。
- C# 8 仍处于预览阶段 (source)。
The C# 8 beta compiler is available with Visual Studio 2019, or the latest .NET Core 3.0 preview. (source)
据此,我推断 C# 8 当前 在 VS2017 中可用,并且没有 计划对其进行更改。
展望未来,微软希望将 C# 语言版本与框架版本比过去更紧密地联系在一起。他们真的只希望您将 C# 8 与 .NET Core 3.x 和 .NET Standard 2.1 项目一起使用,这意味着使用 Visual Studio 2019。我对
但是,如果您真的想要 ,您现在可以在 Visual Studio 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;
}
}
}
您可以在 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
包版本映射了与 vs2019 相比的 c#8 支持能力。
- 版本 3.0 包含 C# 8.0 的预览版(Visual Studio 2019 版本 16.0),但预览版 1 使用的是 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>
您还可以在 Visual Studio 2019 年的任何 .NET 项目中使用 C# 8。https://dirkstrauss.com/enabling-c-8-in-visual-studio-2019/
虽然有一些限制,但这是可能的。