Solución:
De cara al futuro, Microsoft quiere vincular las versiones en lenguaje C # más estrechamente a las versiones del marco que en el pasado. Realmente solo quieren que use C # 8 con proyectos .NET Core 3.xy .NET Standard 2.1, y eso significa usar Visual Studio 2019. Mi respuesta a ¿C # 8 es compatible con .NET Framework? tiene todos los detalles sangrientos.
Sin embargo, si realmente quieres ahora puede usar C # 8 en Visual Studio 2017 usando el mismo truco que trae C # 7 a Visual Studio 2015: instale la última versión del paquete Microsoft.Net.Compilers Nuget en el proyecto. Funciona, pero, por supuesto, VS 2017 no conoce la sintaxis de C # 8, por lo que no se ve muy bonito. Aquí hay una captura de pantalla que muestra que VS 2017 puede compilar una pequeña biblioteca de prueba utilizando tipos de referencia que aceptan valores NULL y un método local estático (ambos son características de C # 8):
Aquí está el .csproj y el código si quieres probarlo:
<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;
}
}
}
Agregue al comentario de series0ne sobre las versiones principales: es cierto que los nuevos VS generalmente se envían con la nueva versión de C #. Sin embargo, en la experiencia pasada, es posible actualizar la versión anterior de VS para compilar una versión más nueva del código C #, principalmente actualizando el paquete Nuget “Microsoft.Net.Compilers”. Puede consultar esta publicación para obtener más información. ¿Cómo usar c # 7 con Visual Studio 2015?
Puede utilizar Microsoft.Net.Compilers.Toolset en lugar de Microsoft.Net.Compilers
en vs2017
Este paquete está diseñado como un reemplazo para Microsoft.Net.Compilers (que es un paquete solo para Windows) y Microsoft.NETCore.Compilers. Estos paquetes ahora están obsoletos y se eliminarán en el futuro.
El paquete requiere MSBuild 15.0 y .NET Destkop 4.7.2 o .NET Core 2.1
Las versiones del paquete:
La versión del paquete asigna la capacidad de compatibilidad con c # 8 en comparación con vs2019.
- La versión 3.0 incluye una vista previa de C # 8.0 (Visual Studio 2019 versión 16.0), pero se usó 2.11 para la vista previa1.
- La versión 3.1 incluye una vista previa de C # 8.0 (Visual Studio 2019 versión 16.1)
- La versión 3.2 incluye una vista previa de C # 8.0 (Visual Studio 2019 versión 16.2)
- La versión 3.3 incluye C # 8.0 (Visual Studio 2019 versión 16.3, .NET Core 3.0)
Cómo utilizar
Agregue estas líneas al .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>