CS1617: opzione "6" non valida per / langversion; deve essere ISO-1, ISO-2, 3, 4, 5 o predefinito


91

Ho continuato a ricevere quell'errore durante l'esecuzione di una nuova applicazione ASP.NET MVC (direttamente dalla community di VS 2015) su una macchina Windows 2008 Server.


3
Esegui il downgrade della versione della lingua a 5. Dai un'occhiata a: Come cambiare la versione della lingua
NASSER

Nel mio caso, ho aggiornato System.Web.Mvc.dll dalla versione 5.2.3 alla 5.2.7, ha risolto questo problema perché la versione non è corretta.
Dino Liu

Nel 2019 si è verificato un errore simile . Vedi anche questo problema correlato a GitHub .
Uwe Keim

Risposte:


104

Molte persone si stanno imbattendo in questo, quindi ho voluto postare qui.

Ho trovato una soluzione folle e facile grazie a questo ragazzo: Expertdebugger .

Esegui semplicemente il downgrade della versione in lingua da C # 6 a C # 5, in questo modo:

<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>

Cambia il langversion:6verso il basso da 6 a 5 -langversion:5

Risolto il problema per me. Ringrazialo.


1
Grazie mille per avermi aiutato.
AH.

28
Questo significa solo dire al compilatore di compilare con C # versione 5 invece di 6, che non è quello che vuoi se stai creando un progetto .NET 4.6 ... Quello che devi veramente cambiare è il tipo di compilatore, come è mostrato su l'altra risposta a questa domanda!
Nuno Agapito

1
Oppure rimuovi il blocco <system.codedom> stesso, risolverà anche il problema.
Anupam Singh,

5
Cambia questo dove? Voglio dire, dove devo mettere questo codice?
Unbreakable

Inseriscilo nel tuo file web.config o app.config
csharpforevermore

82

Se desideri utilizzare C # 6.0:

  1. Assicurati che la versione .NET del tuo progetto sia successiva alla 4.5.2.
  2. Quindi controlla il tuo .configfile per eseguire le seguenti modifiche.

Cerca system.codedome modificalo in modo che appaia come mostrato di seguito:

<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>

È esattamente quello che stavo cercando. Ho iniziato a ricevere questo errore dopo aver aggiornato un progetto ASP.NET MVC da .NET Framework 4.5.2 a 4.6. Non ne sono sicuro, ma penso che sarebbe meglio se Visual Studio aggiornasse quelle righe da solo.
Zignd

3
Questa dovrebbe essere la risposta corretta in quanto risolve effettivamente il problema e consente al compilatore di utilizzare l'ultima versione invece di tornare alla vecchia versione
SM3RKY

1
D'accordo con SM3RKY: questa risposta è più pertinente in quanto risolve il problema, piuttosto che aggirarlo!
Jon Story,

Se aggiorni la tua soluzione a .net 4.6 per un progetto esistente utilizzando VS 2015 Community o inferiore, si verifica questo errore. Dopo aver aggiornato VS 2015 Update 3, questa correzione viene fornita per impostazione predefinita per i nuovi progetti. Tuttavia la risposta è la soluzione esatta!
Mahmut C

Questo ha risolto il problema per me in un progetto .Net 4.6.2 utilizzando ASP.NET (webforms) e VB.NET
Eric Hewett

14

Ho scoperto che la causa diretta dell'errore nel mio caso era:

build -> advanced -> language version

questo ha senso poiché l'errore sta affermando che esiste un'opzione non valida per la lingua.

ma prima funzionava bene, quindi deve essere stato selezionato. cosa è cambiato? risulta che un membro del mio team è stato aggiornato al 2017, mentre stavo ancora utilizzando il 2015. Dopo aver apportato modifiche al progetto, la versione della lingua è stata modificata e ho ricevuto quella modifica sul controllo del codice sorgente. ma la versione selezionata non era disponibile per la mia versione di vs, quindi era vuota, da cui l'errore. dopo aver selezionato un valore nel menu a discesa della lingua (ho scelto l'impostazione predefinita), è apparso un nuovo errore. il nuovo errore causava un errore di compilazione su qualsiasi riga di codice che utilizzava la versione più recente di c #. Ho cambiato il codice per eseguire le stesse funzioni, ma con la sintassi della versione c # e il problema risolto.

quindi, mentre la causa diretta dell'errore era effettivamente una selezione non valida della versione della lingua, la causa principale era dovuta a diverse versioni vs / c # in conflitto.


1
Questa risposta mi ha aiutato dopo aver controllato tutti gli altri. grazie
MindRoasterMir

1
Questa risposta si applicava anche al mio caso in cui stavo cercando di eseguire un progetto impostato su C # 8, ma non è supportato nel mio studio visivo 2017. Solo VS 2019
Vinícius Gabriel

13

Nel mio caso l'errore è stato:

Errore CS1617 Opzione "latest" non valida per / langversion; deve essere ISO-1, ISO-2, Default o un numero intero compreso tra 1 e 6.

Ho aperto il mio file .csproj con il blocco note e ho visto questa riga:

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

Ho cambiato l'ultimo per un numero intero compreso tra 1 e 6

<LangVersion>6</LangVersion>

L'errore è scomparso!


Grazie mille! Ora il debug in VS2015 e Unity2018 funziona
8Observer8

Non è necessario aprirlo esattamente nel blocco note, ma dallo studio visivo è possibile caricare il progetto e quindi modificare il progetto, il che risolverà anche questo problema.
Shantu

12

Nel mio caso stavo usando MSBuild.exe sbagliato, quello trovato in:

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

Per risolvere l'errore, ho aggiornato la mia variabile di ambiente PATH per iniziare a utilizzare Visual Studio 2017 MSBuild.exe:

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

Si prega di consultare questo collegamento per i dettagli: Errore CS1056: carattere imprevisto "$" che esegue msbuild su un processo di integrazione continua tfs


Lo stesso qui, nel mio caso ho installato gli strumenti di MSBuild e ho usato msbuild da "C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin \ MSBuild.exe"
falstaff

10

nel mio caso (progetto creato in un altro sistema):

  1. progetto pulito (fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni e fare clic su pulisci elemento).
  2. quindi crea il progetto (fai clic con il pulsante destro del mouse sul progetto in Esplora soluzioni e fai clic su Crea elemento).

Posso eseguire questo progetto.


5

Invece di modificare la versione della lingua da 6 a 5, modifica l'attributo "tipo" nel tag del compilatore da

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

per

Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

4

Aggiorna il pacchetto Microsoft.Net.Compilers Nuget alla versione più recente (almeno 2.x)


3

La soluzione più semplice per me è stata l'aggiornamento dei compilatori .Net tramite Package Manager

Pacchetto di installazione Microsoft.Net.Compilers

e quindi modificare le righe Web.Config in this

<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>

1

Si è scoperto che questo era un problema, perché il progetto ASP.NET MVC 4 faceva riferimento a una versione specifica del pacchetto Microsoft.Net.Compilers. Visual Studio utilizzava il compilatore di questo pacchetto specifico e non il compilatore altrimenti installato nel computer.

Un avvertimento o qualcosa del genere sarebbe stato carino da VS2019 :-)

La soluzione quindi è aggiornare il pacchetto Microsoft.Net.Compilers a una versione più recente.

La versione 1.x è per C # 6 La versione 2.x è per C # 7 La versione 3.x è per C # 8 Il modo in cui ho risolto questo problema non era immediatamente ovvio. Visual Studio avrebbe potuto suggerire o suggerire che selezionando una nuova versione nelle impostazioni del progetto quell'impostazione ora era in conflitto con il pacchetto installato nel progetto.

(Ho finito per attivare la registrazione MSBuild a livello di diagnostica per scoprire quale CSC.EXE l'IDE sta davvero cercando di utilizzare)

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



0

Ho appena cambiato la langversiona defaulte ha funzionato per me. 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>


0

Soluzione pulita e build di nuovo Nel mio caso, qualunque sia il blocco delle impostazioni precedenti a causa della mancata corrispondenza. Ho importato un nuovo progetto e l'ho costruito, ho provato a cambiare le versioni e tutto il resto. pulire le soluzioni e costruire ha funzionato per me.


0

Nel mio caso, stavo scaricando una libreria con il codice di esempio dell'implementazione di keycloak di mattorg da GITHUB: https://github.com/mattmorg55/Owin.Security.Keycloak/tree/dev/samples

La soluzione è stata abbastanza semplice, poiché ho utilizzato .Net Framework 4.6.1, ma il progetto all'inizio mi ha pregato di utilizzare 4.6.2. Anche se l'ho scaricato, è stato scelto attivamente per la prima volta al riavvio di tutte le istanze di Visual Studion (o meglio chiudere tutte le istanze). Il progetto è stato manipolato alla 4.6.1 (anche se non lo desideravo e l'ho scelto).

Quindi, dopo aver scelto di nuovo la configurazione per scegliere .Net Framework 4.6.1, l'errore è scomparso immediatamente.


0

Nel mio caso il messaggio di errore era:

ASPNETCOMPILER: errore CS1617: opzione "7.3" non valida per / langversion; deve essere ISO-1, ISO-2, Default o un numero intero compreso tra 1 e 6.

Come affermato in questo numero di GitHub e in questo post della community di sviluppatori VS , sembra essere un bug in un pacchetto NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatform precedente.

Dopo aver aggiornato questo pacchetto NuGet a 3.6.0, l'errore persisteva ancora nella mia applicazione web.

Soluzione

Ho scoperto che dovevo eliminare una vecchia cartella "bin \ Roslyn" nella mia applicazione Web per farlo funzionare.

Sembra che il più recente pacchetto NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatform (3.6.0 nel mio caso) non porti più una propria cartella "Rosyln" e, se presente, quella vecchia cartella "Roslyn" ha avuto la precedenza durante la compilazione.


0

Questo è successo a me quando ho rimosso il mio repository dopo averlo spostato in una nuova posizione. La soluzione era scaricare e quindi ricaricare ogni progetto che mostrava questo errore.

Ho provato alcune altre opzioni ma niente ha funzionato per me. Anche in questa situazione i miei file di configurazione erano impostati per utilizzare languageversion 6, quindi impostarli come predefiniti non ha risolto il problema.


0

Se soprattutto le opzioni non funzionano e hai utilizzato pacchetti nuget come Microsoft.Net.Compilers e CodeDom e ancora non funzionano, c'è un problema con il file di progetto aperto file di progetto. Il file di progetto utilizza una delle opzioni del compilatore che non supportano la lingua selezionata. Apri il file di progetto con Notepad ++ e rimuovi la riga seguente.

File di progetto originale

<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')" />

Rimuovi Le seguenti righe

  <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')" />
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.