J'aimerais utiliser C# 8.0 (notamment les plages et les types de référence non nulles) dans Visual Studio 2017. Est-ce possible ?
Réponses
Trop de publicités?À l'avenir, Microsoft souhaite lier les versions du langage C# aux versions du framework plus étroitement que par le passé. L'entreprise souhaite que vous utilisiez uniquement C# 8 pour les projets .NET Core 3.x et .NET Standard 2.1, ce qui implique l'utilisation de Visual Studio 2019. Ma réponse à la question C# 8 prend-il en charge le .NET Framework ? a tous les détails sanglants.
Cependant, si vous voulez vraiment vous pouvez désormais utiliser C# 8 dans Visual Studio 2017 en utilisant le même tour qui apporte C# 7 à Visual Studio 2015 : installer la dernière version du Paquet Nuget Microsoft.Net.Compilers dans le projet . Cela fonctionne, mais bien sûr VS 2017 ne connaît pas la syntaxe de C# 8 et cela n'est pas très joli. Voici une capture d'écran montrant que VS 2017 est capable de compiler une petite bibliothèque de test utilisant des types de référence nullables et une méthode locale statique (qui sont tous deux des fonctionnalités de C# 8) :
Voici le .csproj et le code si vous voulez l'essayer :
<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;
}
}
}
Ajoutez à cela le commentaire de series0ne sur les versions majeures : Il est vrai que les nouveaux VS sont généralement livrés avec la nouvelle version de C#. Cependant, dans l'expérience passée, il est possible de mettre à jour une version précédente de VS pour compiler une version plus récente du code C#, principalement en mettant à jour le paquet Nuget "Microsoft.Net.Compilers". Vous pouvez vous référer à ce post pour plus d'informations. Comment utiliser c#7 avec Visual Studio 2015 ?
Vous pouvez utiliser Microsoft.Net.Compilateurs.Toolset au lieu de Microsoft.Net.Compilers
dans vs2017
Ce paquet est destiné à servir de remplacement pour Microsoft.Net.Compilers (qui est un paquetage réservé à Windows) et Microsoft.NETCore.Compilers. Ces paquets sont désormais obsolètes et seront supprimés à l'avenir.
Le paquet nécessite MSBuild 15.0 et .NET Destkop 4.7.2 ou .NET Core 2.1.
Le paquet versions :
La version du paquet cartographie la capacité du support c# 8 par rapport à vs2019.
- La version 3.0 comprend un aperçu de C# 8.0 (Visual Studio 2019 version 16.0), mais la version 2.11 a été utilisée pour l'aperçu1.
- La version 3.1 comprend un aperçu de C# 8.0 (Visual Studio 2019 version 16.1).
- La version 3.2 comprend un aperçu de C# 8.0 (Visual Studio 2019 version 16.2).
- La version 3.3 inclut C# 8.0 (Visual Studio 2019 version 16.3, .NET Core 3.0)
Mode d'emploi
Ajoutez les lignes suivantes au fichier .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>
Donc l'information actuelle est :
- Visual Studio 2019 a été publié ; il n'est plus en phase d'aperçu.
- C# 8 est encore en phase de prévisualisation ( source ).
-
Le compilateur C# 8 bêta est disponible avec Visual Studio 2019, ou la dernière version préliminaire de .NET Core 3.0. ( source )
De cela, je déduis que le C# 8 est actuellement pas disponibles dans VS2017, et qu'il y a des pas de prévoit de changer cela.
Vous pouvez également utiliser C# 8 dans tout projet .NET dans Visual Studio 2019. https://dirkstrauss.com/enabling-c-8-in-visual-studio-2019/
Il y a cependant quelques limitations, mais c'est possible.