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.
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.
Risposte:
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=\"Web\" /optionInfer+">
<providerOption name="CompilerVersion" value="v4.0"/>
</compiler>
</compilers>
</system.codedom>
Cambia il langversion:6
verso il basso da 6 a 5 -langversion:5
Risolto il problema per me. Ringrazialo.
Se desideri utilizzare C # 6.0:
.config
file per eseguire le seguenti modifiche.Cerca system.codedom
e 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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
Ho scoperto che la causa diretta dell'errore nel mio caso era:
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.
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!
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
nel mio caso (progetto creato in un altro sistema):
Posso eseguire questo progetto.
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
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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
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)
Ho aggiornato Microsoft.Net.Compilers alla versione 2.0 o successiva
Ho appena cambiato la langversion
a default
e 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=\"Web\" /optionInfer+”>
<providerOption name=”CompilerVersion” value=”v4.0″/>
</compiler>
</compilers>
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.
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.
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.
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.
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.
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')" />