CS1617: option '6' non valide pour / langversion; doit être ISO-1, ISO-2, 3, 4, 5 ou par défaut

91

J'ai gardé cette erreur lors de l'exécution d'une nouvelle application ASP.NET MVC (tout droit sortie de la communauté VS 2015) sur une machine Windows 2008 Server.

Kyle Carlson
la source
3
Rétrograder la version linguistique à 5. Regardez: Comment changer la version linguistique
NASSER
Dans mon cas, j'ai mis à niveau System.Web.Mvc.dll de la version 5.2.3 à 5.2.7, cela a résolu ce problème car la version est incorrecte.
Dino Liu
En 2019, une erreur similaire s'est produite. Consultez également ce problème lié à GitHub .
Uwe Keim le

Réponses:

104

Beaucoup de gens s'y heurtent, alors je voulais poster ici.

J'ai trouvé une solution de contournement facile et folle grâce à ce gars: Expertdebugger .

Rétrogradez simplement votre version linguistique de C # 6 à C # 5, comme ceci:

<system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">
        <providerOption name="CompilerVersion" value="v4.0"/>
      </compiler>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+">
          <providerOption name="CompilerVersion" value="v4.0"/>
      </compiler>
    </compilers>
</system.codedom>

Changer le langversion:6vers le bas de 6 à 5 -langversion:5

Corrigé pour moi. Remerciez-le.

Kyle Carlson
la source
1
Merci beaucoup qui m'a aidé.
AH.
28
C'est juste dire au compilateur de compiler avec C # version 5 au lieu de 6, ce qui n'est pas ce que vous voulez si vous créez un projet .NET 4.6 ... Ce que vous devez vraiment changer est le type de compilateur, comme il est montré sur l'autre réponse à cette question!
Nuno Agapito
1
Ou supprimez le bloc <system.codedom> lui-même, cela résoudra également le problème.
Anupam Singh
5
Changer cela où? Je veux dire où dois-je mettre ce code?
Incassable
Mettez-le dans votre fichier web.config ou app.config
csharpforevermore
82

Si vous souhaitez utiliser C # 6.0:

  1. Assurez-vous que la version .NET de votre projet est supérieure à 4.5.2.
  2. Et puis vérifiez votre .configfichier pour effectuer les modifications suivantes.

Recherchez system.codedomet modifiez-le pour qu'il ressemble à l'illustration ci-dessous:

<system.codedom>
 <compilers>
  <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
  <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
 </compilers>
</system.codedom>
chsword
la source
C'est exactement ce que je cherchais. J'ai commencé à recevoir cette erreur après la mise à niveau d'un projet ASP.NET MVC de .NET Framework 4.5.2 vers 4.6. Je ne suis pas sûr, mais je pense qu'il serait préférable que Visual Studio mette à jour ces lignes par lui-même.
Zignd
3
Cela devrait être la bonne réponse car cela résout le problème et permet au compilateur d'utiliser la dernière version au lieu de revenir à l'ancienne version
SM3RKY
1
D'accord avec SM3RKY - cette réponse est plus pertinente car elle résout le problème, plutôt que de le contourner!
Jon Story
Si vous mettez à niveau votre solution vers .net 4.6 pour un projet existant utilisant VS 2015 Community ou une version antérieure, cette erreur se produit. Après la mise à jour de VS 2015 Update 3, ce correctif est fourni par défaut pour les nouveaux projets. Cependant, la réponse est la solution exacte!
Mahmut C
Cela a résolu le problème pour moi dans un projet .Net 4.6.2 utilisant ASP.NET (webforms) et VB.NET
Eric Hewett
14

J'ai constaté que la cause directe de l'erreur dans mon cas était:

build -> avancé -> version linguistique

cela a du sens puisque l'erreur indique qu'il existe une option non valide pour la langue.

mais, cela fonctionnait bien avant - donc il doit avoir été sélectionné. Qu'est ce qui a changé? Il s'avère qu'un membre de mon équipe est passé à vs 2017, alors que j'utilisais encore 2015. après avoir apporté des modifications au projet, la version linguistique a été modifiée et j'ai reçu ce changement sur le contrôle de code source. mais la version sélectionnée n'était pas disponible pour ma version de vs, elle était donc vide - d'où l'erreur. après avoir sélectionné une valeur dans la liste déroulante de la langue (j'ai choisi la valeur par défaut), une nouvelle erreur est apparue. la nouvelle erreur provoquait un échec de construction sur toutes les lignes de code qui utilisaient la nouvelle version de c #. J'ai changé le code pour exécuter les mêmes fonctions, mais avec ma syntaxe de version c # et mon problème résolu.

Ainsi, alors que la cause directe de l'erreur était en effet une sélection invalide de la version de la langue, la cause principale était due à des versions différentes de vs / c # en conflit.

Heriberto Lugo
la source
1
Cette réponse m'a aidé après avoir vérifié tous les autres. merci
MindRoasterMir
1
Cette réponse s'appliquait également à mon cas où j'essayais d'exécuter un projet défini sur C # 8, mais il n'est pas pris en charge dans mon studio visuel 2017. Seulement VS 2019
Vinícius Gabriel
13

Dans mon cas, l'erreur était:

Erreur CS1617 Option non valide 'latest' pour / langversion; doit être ISO-1, ISO-2, Default ou un entier compris entre 1 et 6.

J'ai ouvert mon fichier .csproj avec le bloc-notes et j'ai vu cette ligne:

<PropertyGroup>
    <LangVersion>latest</LangVersion>
</PropertyGroup>

J'ai changé le dernier pour un entier compris entre 1 et 6

<LangVersion>6</LangVersion>

L'erreur a disparu!

nahuelmisc
la source
Merci beaucoup! Maintenant le débogage dans VS2015 et Unity2018 fonctionne
8Observer8
Ne doit pas être ouvert exactement dans le bloc-notes, mais à partir de l'étude visuelle, on peut télécharger le projet puis le modifier, ce qui résoudra également ce problème.
Shantu
12

Dans mon cas, j'utilisais le mauvais MSBuild.exe, celui trouvé dans:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319

Pour résoudre l'erreur, j'ai mis à jour ma variable d'environnement PATH pour commencer à utiliser Visual Studio 2017 MSBuild.exe:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSbuild.exe

Veuillez consulter ce lien pour plus de détails: Erreur CS1056: caractère inattendu '$' exécutant le msbuild sur un processus d'intégration continue tfs

user8128167
la source
Idem ici, dans mon cas, j'ai installé les outils MSBuild et utilisé msbuild de "C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin \ MSBuild.exe"
falstaff
10

dans mon cas (projet créer dans un autre système):

  1. nettoyer le projet (cliquez avec le bouton droit sur le projet dans l'explorateur de solutions et cliquez sur nettoyer l'élément).
  2. puis construisez le projet (cliquez avec le bouton droit sur le projet dans l'explorateur de solutions et cliquez sur l'élément de construction).

Je peux exécuter ce projet.

Ali Rasouli
la source
5

Au lieu de changer la version du langage de 6 à 5, changez l'attribut "type" sur la balise du compilateur de

Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

à

Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Nwachukwu A. Nnaemeka
la source
4

Mettez à niveau le package Microsoft.Net.Compilers Nuget vers la dernière version (au moins 2.x)

wnbates
la source
3

La solution la plus simple pour moi était de mettre à niveau les compilateurs .Net via Package Manager

Package d'installation Microsoft.Net.Compilers

puis en modifiant les lignes Web.Config en ceci

<system.codedom>
 <compilers>
  <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
  <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
 </compilers>
</system.codedom>
Mike
la source
1

Il s'avère que c'était un problème, car le projet ASP.NET MVC 4 faisait référence à une version spécifique du package Microsoft.Net.Compilers. Visual Studio utilisait le compilateur de ce package spécifique, et non le compilateur qui était installé sur l'ordinateur.

Un avertissement ou quelque chose aurait été bien de VS2019 :-)

La solution consiste alors à mettre à jour le package Microsoft.Net.Compilers vers une version plus récente.

La version 1.x est pour C # 6 La version 2.x est pour C # 7 La version 3.x est pour C # 8 Comment j'ai réussi à résoudre ce problème n'était pas immédiatement évident. Visual Studio aurait pu suggérer ou laisser entendre qu'en sélectionnant une nouvelle version dans les paramètres du projet, ce paramètre était désormais en conflit avec le package installé dans le projet.

(J'ai fini par activer la journalisation MSBuild de niveau Diagnostics pour savoir quel CSC.EXE l'EDI essaie vraiment d'utiliser)

https://developercommunity.visualstudio.com/content/problem/519531/c-7x-versions-do-not-seem-to-work-in-vs2019.html

B1zzle
la source
0

J'ai mis à jour les Microsoft.Net.Compilers vers la version 2.0 ou supérieure

regarde ça

davcup
la source
0

J'ai juste changé le langversionen defaultet cela a fonctionné pour moi. VS 2015

<system.codedom>
<compilers>
  <compiler language=”c#;cs;csharp” extension=”.cs” type=”Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″ warningLevel=”4″ compilerOptions=”/langversion:default /nowarn:1659;1699;1701″>
    <providerOption name=”CompilerVersion” value=”v4.0″/>
  </compiler>
  <compiler language=”vb;vbs;visualbasic;vbscript” extension=”.vb” type=”Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″ warningLevel=”4″ compilerOptions=”/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+”>
      <providerOption name=”CompilerVersion” value=”v4.0″/>
  </compiler>
</compilers>

Kumar
la source
0

Nettoyer la solution et reconstruire Dans mon cas, quels que soient les paramètres précédents bloquaient en raison d'une incompatibilité. J'ai importé un nouveau projet et l'ai construit, essayé de changer de version et tout. nettoyer les solutions et construire a fonctionné pour moi.

SumansTM21
la source
0

Dans mon cas, je téléchargeais une bibliothèque avec un exemple de code d'implémentation keycloak par mattorg de GITHUB: https://github.com/mattmorg55/Owin.Security.Keycloak/tree/dev/samples

La solution était assez simple, car j'utilisais .Net Framework 4.6.1, mais le projet m'a supplié au début d'utiliser 4.6.2. Bien que je l'ai téléchargé, il a d'abord été activement choisi, lorsque vous redémarrez toutes les instances de Visual Studion (ou mieux fermez toutes les instances). Le projet a été manipulé en 4.6.1 (bien que je ne l'ai pas souhaité et que je l'ai choisi).

Donc, après avoir choisi à nouveau la configuration pour choisir .Net Framework 4.6.1, l'erreur a disparu immédiatement.

pedda
la source
0

Dans mon cas, le message d'erreur était:

ASPNETCOMPILER: erreur CS1617: option "7.3" non valide pour / langversion; doit être ISO-1, ISO-2, Default ou un entier compris entre 1 et 6.

Comme indiqué dans ce problème GitHub et dans ce message de la communauté des développeurs VS, il semble qu'il s'agisse d'un bogue dans un ancien package NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatform .

Après la mise à niveau de ce package NuGet vers la version 3.6.0, l'erreur persistait toujours dans mon application Web.

Solution

J'ai découvert que je devais supprimer un ancien dossier "bin \ Roslyn" dans mon application Web pour que cela fonctionne.

Il semble que le nouveau package NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatform (3.6.0 dans mon cas) n'apporte plus son propre dossier "Rosyln", et s'il est présent, cet ancien dossier "Roslyn" a pris la priorité lors de la compilation.

Uwe Keim
la source
0

Cela m'est arrivé lorsque j'ai supprimé mon repo après l'avoir déplacé vers un nouvel emplacement. La solution était de décharger puis de recharger chaque projet qui montrait cette erreur.

J'ai essayé quelques autres options mais rien n'a fonctionné pour moi. De plus, dans cette situation, mes fichiers de configuration ont été configurés pour utiliser la version 6 de la langue, donc leur définition par défaut n'a pas résolu le problème.

Brendan Sluke
la source
0

Si toutes les options ci-dessus ne fonctionnent pas et que vous avez utilisé des packages nuget tels que Microsoft.Net.Compilers et CodeDom et ne fonctionnent toujours pas, il y a un problème avec votre fichier de projet. Le fichier de projet utilise l'une des options du compilateur qui ne prend pas en charge la langue sélectionnée. Ouvrez le fichier de projet avec notepad ++ et supprimez la ligne suivante.

Fichier de projet original

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />
  <!--Don't delete below one-->
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />

Supprimer les lignes suivantes

  <Import Project="..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />
Ali
la source