Ответ 1
В дальнейшем Microsoft хочет более тесно связать версии на языке С# с версиями платформы, чем в прошлом. Они действительно хотят, чтобы вы использовали С# 8 с проектами .NET Core 3.x и .NET Standard 2.1, а это означает использование Visual Studio 2019. Мой ответ на вопрос Поддерживает ли С# 8.NET Framework? имеет все кровавые подробности.
Однако если вы действительно хотите , теперь вы можете использовать С# 8 в Visual Studio 2017, используя тот же трюк, который переносит С# 7 в Visual Studio 2015: установить последнюю версию пакета Nuget Microsoft.Net.Compilers в проект. Это работает, но, конечно, VS 2017 не знает о синтаксисе С# 8, поэтому выглядит не очень красиво. Вот снимок экрана, показывающий, что VS 2017 может скомпилировать небольшую библиотеку тестов, используя обнуляемые ссылочные типы и статический локальный метод (оба из которых являются функциями С# 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;
}
}
}