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?
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 await
on .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.
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.