2017-03-08 6 views
39

Quelle est la configuration minimale requise pour le framework .NET et la version CLR pour l'exécution de C# 7? De plus, ai-je besoin de VS 2017 pour compiler C# 7?C# 7. Exigences de version .NET/CLR/Visual Studio

+1

Toute version .NET 4.6.x est correcte. Roslyn est open source donc tout est possible. Si vous voulez que quelqu'un le fasse pour vous, téléchargez VS2017. Il a été publié hier. L'édition communautaire est gratuite. –

Répondre

74

Vous n'avez pas besoin de cibler .NET 4.6 et supérieur, c'est incorrect. Pour utiliser Tuples, vous avez besoin du package System.ValueTuple NuGet. Juste sur https://www.nuget.org/packages/System.ValueTuple/ vous pouvez le voir indique qu'il prend en charge 4.5 et ci-dessus, et en fait, il prend en charge 4.0 et ci-dessus. Et si vous voulez devenir fou, si vous créez votre propre classe System.ValueTuple qui fait exactement ce que fait ce paquet, il fonctionnera sur .NET 3.5 et probablement plus ancien aussi. Pour les types "Task-like", vous avez également besoin d'un package NuGet, https://www.nuget.org/packages/System.Threading.Tasks.Extensions/. Ce paquet fonctionne également sur .NET 4.5 et plus récent selon sa documentation.

D'autres fonctionnalités C# 7 fonctionneront uniquement sur .NET 2 et plus, car elles ne sont que du sucre syntaxique. Par exemple, je viens d'écrire ce qui suit dans .NET 2.0 et correctement jette:

static void Main(string[] args) 
    { 
     string test = null; 
     string d = test ?? throw new ApplicationException("test"); 
    } 

De même, int.TryParse("123", out int i); fonctionne très bien juste .NET 2.0. Je n'ai pas testé toutes les fonctionnalités C# 7, mais en général, à l'exception de Tuples (et de leurs fonctions connexes comme la déconstruction), cela devrait fonctionner dans .NET 2.0 et au-dessus car la plupart ne sont que du sucre syntaxique . Cela étant dit, oui, vous avez besoin de VS2017 pour compiler C# 7. Je suis sûr qu'à un certain moment d'autres compilateurs supporteront C# 7 mais pas aujourd'hui.

Caractéristiques Je confirme le travail dans .NET 2.0:

  • binaires littéraux
  • Digit Separators
  • Inline out paramètres
  • En utilisant _ pour éliminer des paramètres
  • Fonctions locales
  • type modèle basé correspondant if (obj is int i) et case int i:
  • motif constant correspondant à if (i is 2)
  • modèle Var correspondant if (i is var j)
  • Ref retourne
  • Throw expressions
  • expression valides accesseurs
  • expression constructeurs valides et finaliseurs
+1

Pourquoi la downvote? Qu'est-ce qui est inexact dans ma réponse? – dman2306

+1

Upvote de moi, mais il vaut la peine de lire [cette réponse] (http://stackoverflow.com/a/42675652/7122), car un paquet de nuget est également nécessaire pour les nouvelles fonctionnalités asynchrones. –

+0

@DavidArno Merci, oublié à propos de cette fonctionnalité. J'ai mis à jour pour inclure également des informations sur ce paquet de nugget. Malheureusement, il y a eu tellement de choses "considérées" pour C# 7, il est difficile de trouver une liste exacte de ce qui a été implémenté car les Notes de version pour VS2017 semblent incomplètes et ne mentionnent que les ajouts les plus importants. – dman2306

1

Pour utiliser la pleine puissance de C# 7 en boîte (sans référence aux pépites et ainsi de suite) vous avez besoin de VS 2017 et .Net 4.7 en tant que cadre cible.