2017-09-26 1 views
5

Pour utiliser le nouveau C# 7.1 language features avec Visual Studio 2017, vous devez ajouter le paramètre <LangVersion>latest</LangVersion> à votre fichier de projet.Utilisation de C# 7.1 avec MSBuild

Cependant, la construction de tels projets de MSBuild (version 15.3.409.57025, situé à C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin) provoque une erreur:

CSC : error CS1617: Invalid option 'latest' for /langversion; 
must be ISO-1, ISO-2, Default or an integer in range 1 to 6. 

Cette fonctionnalité est-tout simplement pas encore pris en charge par MSBuild, ou est-il possible d'obtenir cette travail?

Ce couvre plus de 200 projets qui ont été créés à l'origine de diverses façons dans Visual Studio 2013 et 2015. Ils ont tous été réorientée à 4,7 .NET en utilisant l'outil Target Framework Migrator (qui a sauvé beaucoup de cliquer et semble - basé sur l'inspection. Changements de fichier csproj - pour faire le travail correctement).

Tous les projets ont réussi à construire à partir de Visual Studio 2017.

+0

êtes-vous en mesure de partager le contenu de votre fichier csproj? –

+0

Où réside votre MSBuild? Ici, il réside dans 'C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin' et l'ajout de l'élément de langue fonctionne. Votre projet est-il construit à partir de Visual Studio? –

+0

Pouvez-vous afficher l'exception de votre fichier de projet? –

Répondre

0

Nous avons découvert que nos projets MVC provoquaient ce problème.

Pour fixer, nous avons mis le paquet Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet utilisé par ces projets de la version à 1.0.0 1.0.7.

0

J'ai une solution avec une application console C# en utilisant C# 7.1 ici. En utilisant la ligne de commande VS 2017 (et ainsi MSBuild 15.3.409.57025), cela a fonctionné correctement. (Le .csproj contient bien <LangVersion>latest</LangVersion>.)

Is this feature just not yet supported by MSBuild, or is it possible to get this working?

Oui il est.

Quelle instance de csc.exe est en cours d'exécution et quelle est sa version? Parce que cela ressemble, en dépit de la citation de la version, vous avez la mauvaise version de csc.exe (le message d'erreur dit 1-6 donc même pas C# 7 fonctionnerait).

+0

Quelle est exactement la solution que vous proposez? Tout semble fonctionner correctement hors de la boîte comme décrit dans les procédures de OP. –

+0

@Richard - Mise à jour de ma question pour répondre à certaines de vos questions –

+1

@PatrickHofman Mise à jour pour clarifier le fait que j'aborde la partie existentielle de la question. – Richard

6

Ajoutez une référence au package Microsoft.Net.Compilers (version 2.3.x, pour obtenir C# 7.1).

Une courte description of the package:

Microsoft.Net.Compilers

This package not only includes the C# and Visual Basic compilers, it also modifies MSBuild targets so that the included compiler versions are used rather than any system-installed versions. Once installed, this package requires Microsoft Build Tools 2015.

+0

Cela a fait l'affaire pour moi. J'avais le paquet dans mon projet principal, mais aujourd'hui j'ai mis à jour un projet référencé à C# 7.1 et j'ai oublié qu'il n'avait pas ce paquet NuGet. J'ai reçu ce problème exact - construit en VS mais échoue sur le serveur de construction. Merci pour le pourboire! –

+1

En fait ... Mon problème a également été causé par moi en changeant la valeur dans les paramètres de la propriété du projet DEBUG. En visitant les paramètres RELEASE, vous avez trouvé que c'était toujours C# (dernière version majeure). Changer cela, vérifier et faire une autre construction. Heureux maintenant :) –

2

Assurez-vous que vous avez au moins C# 7.1 ou un ensemble plus élevé dans le DebugetRelease. Le réglage au plus tard ne fonctionne pas. Microsoft.Net.Compilers Le paquet nuget ne fonctionne pas et n'a pas besoin d'être installé.

Assurez-vous également que vous exécutez la dernière version MSBuild.

preview