web-dev-qa-db-fra.com

C # 7.0 fonctionne-t-il avec .NET 4.5?

J'ai créé un projet dans Visual Studio 2017 RC pour vérifier si je pouvais utiliser les nouvelles fonctionnalités du langage C # 7.0 dans un projet .NET Framework 4.5. Il me semble qu'après avoir référencé System.ValueTuple NuGet, les nouveaux n-uplets fonctionnent bien. Y a-t-il autre chose auquel je devrais penser, ou est-ce que ça va marcher?

Après avoir vérifié les dépendances System.ValueTuple NuGet, il semble que .NET Framework 4.0 n'est pas pris en charge. Est-ce le cas ou existe-t-il un moyen de faire fonctionner la nouvelle langue dans cette exécution également?

60
Lukáš Lánský

Passons en revue les nouvelles fonctionnalités de C # 7. :

  • Tuples: Le paquetage System.ValueTuple a une version pour le profil portable-net40+sl4+win8+wp8. Cela signifie qu'il est utilisable sur .Net 4.0. (Vous ne savez pas pourquoi les dépendances ne listent que .Net 4.5.)

    Si vous voulez utiliser des n-uplets sur des versions encore plus basses de .Net, cela devrait toujours fonctionner, à condition d'ajouter le code de ValueTuple et les types associés à votre projet.

  • out variables, correspondance de modèle, fonctions locales, membres avec plus d'expression, throw expressions, améliorations de syntaxe littérale numérique: toutes ces fonctionnalités ne sont que du sucre de syntaxe, elles ne nécessitent donc pas de nouvelles fonctionnalités cadre.

  • ref locals and return: Cette fonctionnalité expose en C # ce que le framework supporte depuis le début, donc aucune modification du framework n'est nécessaire ici non plus.

  • Types de retour async généralisés: Pour utiliser cette fonctionnalité, vous avez besoin d'un type ayant l'attribut AsyncMethodBuilder, qui est présent dans le package System.Threading.Tasks.Extensions (avec un tel type, ValueTask<T>). Ce paquet est uniquement supporté sur .Net 4.5, donc pour .Net 4.0, vous devez vous-même compiler les types appropriés . (L'utilisation de awaiton .Net 4.0 requiert également Microsoft.Bcl.Async, mais ce n'est pas nouveau.)

Pour résumer: Tout C # 7.0 devrait fonctionner sur .Net 4.5 après avoir installé les paquetages requis et la plupart d’entre eux devraient également fonctionner sur .Net 4.0.

88
svick

L'exécution d'une application compilée C # 7 sur .NET 4.5 devrait suffire, mais notez que l'exécution d'applications ASP.NET qui utilisent ASP.NET Dynamic Compilation ne fonctionnera pas sur .NET 4.5, car le compilateur C # 7.0 nécessite .NET 4.6 courir.

Source: https://github.com/dotnet/roslyn/issues/17908 :

Le compilateur C # 7.0 (2.0 et versions supérieures) nécessite .NET 4.6 pour fonctionner

Les informations sur https://www.nuget.org/packages/Microsoft.Net.Compilers/2.0.1 (concernant la prise en charge de .NET 4.5) semblent obsolètes.

23
Michael Kaliszka