web-dev-qa-db-fra.com

Comment activer la fonctionnalité C # 6.0 dans Visual Studio 2013?

Je parcourais les dernières fonctionnalités introduites dans C # 6.0 et suivais simplement un exemple d'initialisation automatique des propriétés,

class NewSample
{
    public Guid Id { get; } = Guid.NewGuid();
}

mais mon IDE n'a pas reconnu la syntaxe.

Je me demande comment je pourrais activer C # 6.0 dans Visual Studio 2013. Le framework Target que j'utilise est 4.5.1.

198
Hassaan

Informations pour le logiciel de pré-version obsolète:

Selon this c'est juste une installation et c'est parti pour Visual Studio 2013:

En fait, installer le compilateur C # 6.0 à partir de cette version implique peu plus que l'installation d'une extension Visual Studio 2013, qui à son tour met à jour les fichiers cible MSBuild.

Il suffit donc d’obtenir les fichiers de https://github.com/dotnet/roslyn et vous êtes prêt à partir.

Vous devez savoir qu'il s'agit d'une version obsolète des spécifications implémentées, car elles ne mettent plus à jour le package pour Visual Studio 2013 :

Vous pouvez également essayer l'aperçu utilisateur final d'avril, qui s'installe au-dessus de Visual Studio 2013. (Remarque: cet aperçu de VS 2013 est obsolète et n'est plus mis à jour).

Donc, si vous souhaitez utiliser la dernière version, vous devez télécharger le fichier Visual Studio 2015 .

63
Patrick Hofman

Sous VS2013, vous pouvez installer les nouveaux compilateurs dans le projet en tant que package de nuget . De cette façon, vous n'avez pas besoin de VS2015 ou d'un serveur de build mis à jour.

https://www.nuget.org/packages/Microsoft.Net.Compilers/

Install-Package Microsoft.Net.Compilers

Le paquet vous permet d'utiliser/de construire le code/la syntaxe C # 6.0. Etant donné que VS2013 ne reconnaît pas nativement la nouvelle syntaxe C # 6.0, , il affichera des erreurs dans la fenêtre de l'éditeur de code bien que sa construction soit correcte .

En utilisant Resharper, vous obtiendrez des lignes sinueuses sur les fonctionnalités de C # 6, mais le bulbe vous permettra d'activer le support C # 6.0 pour ce projet (paramètre enregistré dans .DotSettings).

Comme mentionné par @ stimpy77: pour le support dans les vues de MVC Razor , vous aurez besoin d'un supplément package (pour ceux qui ne font pas lire les commentaires)

Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

Si vous souhaitez une prise en charge complète de C # 6.0, vous devez installer VS2015.

177
David De Sloovere

Il est à noter que le le temps de construction sera augmenté pour les utilisateurs de VS 2015 après:

Install-Package Microsoft.Net.Compilers

Ceux qui utilisent VS 2015 et doivent conserver ce paquet dans leurs projets peuvent fixer un temps de construction plus long.

Editez le fichier packages\Microsoft.Net.Compilers.1.2.2\build\Microsoft.Net.Compilers.props et nettoyez-le. Le fichier devrait ressembler à:

<Project DefaultTargets="Build" 
         xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
</Project>

Cela force un projet à être construit tel qu’il était avant d’ajouter le package Microsoft.Net.Compilers

4
Ashot Muradian

Beaucoup de réponses ici ont été écrites avant que Roslyn (les compilateurs .NET C # et VB à code source ouvert) passent à .NET 4.6. Donc, ils ne vous aideront pas si votre projet cible, disons, 4.5.2 comme le mien (hérité et ne peut pas être changé).

Mais vous pouvez récupérer une version précédente de Roslyn à partir de https://www.nuget.org/packages/Microsoft.Net.Compilers et l'installer à la place. de la dernière version. J'ai utilisé 1.3.2. (J'ai essayé la version 2.0.1 - qui semble être la dernière version exécutée sur .NET 4.5 - mais je n'ai pas réussi à la compiler *.) Exécutez cette opération à partir de la console du gestionnaire de packages dans VS 2013:

PM> Install-Package Microsoft.Net.Compilers -Version 1.3.2

Puis redémarrez Visual Studio. J'ai eu quelques problèmes au début; vous devez redéfinir la version C # sur default (C # 6.0 n'apparaît pas dans la liste des versions, mais semble avoir été configuré par défaut), puis nettoyez, enregistrez, redémarrez VS et recompiler.

Il est intéressant de noter que je n’ai pas eu d’erreurs IntelliSense en raison des fonctionnalités C # 6.0 utilisées dans le code (c’est la raison pour laquelle nous avons voulu utiliser C # 6.0 au départ).

* version 2.0.1 a renvoyé une erreur La tâche "Microsoft.CodeAnalysis.BuildTasks.Csc" n'a pas pu être chargée à partir de l'assembly Microsoft.Build.Tasks.CodeAnalysis.dll. Impossible de charger le fichier ou l'assembly 'Microsoft. Build.Utilities.Core, version = 14.0.0.0, Culture = neutre, PublicKeyToken = b03f5f7f11d50a3a 'ou l’une de ses dépendances. Le système ne trouve pas le fichier spécifié. Confirmez que la déclaration est correcte, que l’Assembly et toutes ses dépendances sont disponibles. et que la tâche contient une classe publique qui implémente Microsoft.Build.Framework.ITask.

UPDATE Depuis que j'ai posté cette réponse, j'ai remarqué que si vous modifiez un code pendant le débogage ("Edit and Continue"), vous aimerez trouver que votre code C # 6.0 va soudainement afficher comme des erreurs dans ce qui semble revenir à un environnement antérieur à C # 6.0. Cela nécessite un redémarrage de votre session de débogage. TRES ennuyeux surtout pour les applications web.

4
SteveCinq

Il est possible d'utiliser toutes les fonctionnalités de C # 6.0 dans Visual Studio 2013 si vous disposez de Resharper.
Vous devez activer Resharper Build and voilá! Dans Options Resharper -> Construire - activez Resharper Build et dans "Utiliser la version de MSBuild.exe", choisissez "Dernier installé".

De cette façon, Resharper construira vos projets C # 6.0 et ne soulignera pas le code C # 6.0 comme non valide.

J'utilise également cela bien que j'ai Visual Studio 2015 parce que:

  1. Les tests unitaires dans Resharper ne fonctionnent pas pour moi avec Visual Studio 2015 pour une raison quelconque
  2. VS 2015 utilise beaucoup plus de mémoire que VS 2013.

Je mets ceci ici, car je cherchais une solution à ce problème depuis un certain temps maintenant et cela aiderait peut-être quelqu'un d'autre.

2
devdimi