CS1617: opção inválida '6' para / langversion; deve ser ISO-1, ISO-2, 3, 4, 5 ou Padrão

93

Continuou recebendo esse erro ao executar um novo aplicativo ASP.NET MVC (direto da Comunidade VS 2015) em uma máquina com Windows 2008 Server.

Kyle Carlson
fonte
3
Faça downgrade da versão do idioma para 5. Veja: Como alterar a versão do idioma
NASSER
No meu caso, eu atualizei System.Web.Mvc.dll da versão 5.2.3 para 5.2.7, ele corrigiu esse problema porque a versão está incorreta.
Dino Liu
Em 2019, um erro semelhante ocorreu. Veja também este problema relacionado do GitHub .
Uwe Keim

Respostas:

107

Muitas pessoas estão se deparando com isso, então eu queria postar aqui.

Encontrei uma solução muito fácil graças a esse cara: Expertdebugger .

Simplesmente faça downgrade de sua versão de idioma de C # 6 para C # 5, assim:

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

Mude langversion:6para a parte inferior de 6 para 5 -langversion:5

Consertou para mim. Agradecê-lo.

Kyle Carlson
fonte
1
Muito obrigado por me ajudar.
AH.
29
Isso é apenas dizer ao compilador para compilar com C # versão 5 em vez de 6, que não é o que você quer se estiver fazendo um projeto .NET 4.6 ... O que você realmente precisa mudar é o tipo de compilador, como está mostrado no a outra resposta a esta pergunta!
Nuno Agapito
1
Ou remova o próprio bloco <system.codedom>, isso também corrigirá o problema.
Anupam Singh
5
Alterar onde? Quer dizer, onde devo colocar este código?
Inquebrável
Coloque-o em seu arquivo web.config ou app.config
csharpforevermore
83

Se você gostaria de usar C # 6.0:

  1. Certifique-se de que a versão .NET do seu projeto seja superior a 4.5.2.
  2. Em seguida, verifique seu .configarquivo para realizar as seguintes modificações.

Procure system.codedome modifique-o para que fique conforme mostrado abaixo:

<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
fonte
Isso é exatamente o que eu estava procurando. Comecei a receber esse erro depois de atualizar um projeto ASP.NET MVC do .NET Framework 4.5.2 para 4.6. Não tenho certeza, mas acho que seria melhor se o Visual Studio atualizasse essas linhas sozinho.
Zignd
3
Esta deve ser a resposta correta, pois na verdade corrige o problema e permite que o compilador use a versão mais recente em vez de voltar para a versão antiga
SM3RKY
1
Concordo com SM3RKY - esta resposta é mais relevante porque resolve o problema, em vez de contorná-lo!
Jon Story de
Se você atualizar sua solução para .net 4.6 para um projeto existente usando VS 2015 Community ou abaixo, este erro ocorre. Depois de atualizar o VS 2015 Update 3, esta correção vem por padrão para os novos projetos. No entanto, a resposta é a correção exata!
Mahmut C
Isso corrigiu o problema para mim em um projeto .Net 4.6.2 usando ASP.NET (webforms) e VB.NET
Eric Hewett
14

Descobri que a causa direta do erro no meu caso foi:

construir -> avançado -> versão do idioma

isso faz sentido, pois o erro está afirmando que há uma opção inválida para o idioma.

mas isso estava funcionando bem antes - então deve ter sido selecionado. o que mudou? Acontece que um membro da minha equipe atualizou para vs 2017, enquanto eu ainda estava usando 2015. depois que ele fez alterações no projeto, a versão do idioma foi alterada e eu recebi essa alteração no controle de origem. mas a versão selecionada não estava disponível para minha versão de vs, então estava em branco - daí o erro. depois de selecionar um valor no menu suspenso de idiomas (eu escolhi o padrão), um novo erro apareceu. o novo erro estava causando uma falha de construção em qualquer linha de código que usava a versão mais recente do c #. Eu mudei o código para executar as mesmas funções, mas com a sintaxe da minha versão c # e o problema resolvido.

então, embora a causa direta do erro fosse de fato uma seleção inválida da versão do idioma, a causa raiz era devido a diferentes versões vs / c # conflitantes.

Heriberto Lugo
fonte
1
Esta resposta me ajudou depois de verificar todas as outras. obrigado
MindRoasterMir
1
Essa resposta também se aplica ao meu caso em que eu estava tentando executar um projeto configurado para C # 8, mas não é compatível com meu visual studio 2017. Apenas VS 2019
Vinícius Gabriel
13

No meu caso, o erro foi:

Erro CS1617 Opção inválida 'mais recente' para / langversion; deve ser ISO-1, ISO-2, Padrão ou um número inteiro no intervalo de 1 a 6.

Abri meu arquivo .csproj com o bloco de notas e vi esta linha:

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

Eu mudei o último para um inteiro no intervalo de 1 a 6

<LangVersion>6</LangVersion>

O erro desapareceu!

nahuelmisc
fonte
Muito obrigado! Agora a depuração em VS2015 e Unity2018 funciona
8Observer8
Não precisa ser exatamente aberto no bloco de notas, mas a partir do estudo visual pode-se fazer o upload do projeto e depois editar o projeto, o que também resolverá o problema.
Shantu de
12

No meu caso, eu estava usando o MSBuild.exe errado, aquele encontrado em:

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

Para resolver o erro, atualizei minha variável de ambiente PATH para começar a usar o Visual Studio 2017 MSBuild.exe:

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

Por favor, veja este link para detalhes: Erro CS1056: Caractere inesperado '$' executando o msbuild em um processo de integração contínua tfs

user8128167
fonte
O mesmo aqui, no meu caso eu instalei as ferramentas do MSBuild e usei o msbuild de "C: \ Arquivos de programas (x86) \ MSBuild \ 14.0 \ Bin \ MSBuild.exe"
falstaff
10

no meu caso (projeto criado em outro sistema):

  1. limpar projeto (clique com o botão direito no projeto no Solution Explorer e clique em limpar item).
  2. em seguida, construa o projeto (clique com o botão direito no projeto no explorador de soluções e clique no item de construção).

Eu posso executar este projeto.

Ali Rasouli
fonte
5

Em vez de alterar a versão do idioma de 6 para 5, altere o atributo "tipo" na tag do compilador de

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

para

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

Atualize o pacote Nuget Microsoft.Net.Compilers para a versão mais recente (pelo menos 2.x)

wnbates
fonte
3

A solução mais fácil para mim foi atualizar os compiladores .Net via Gerenciador de pacotes

Pacote de instalação Microsoft.Net.Compilers

e, em seguida, alterando as linhas Web.Config para este

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

Acontece que isso era um problema, porque o projeto ASP.NET MVC 4 fazia referência a uma versão específica do pacote Microsoft.Net.Compilers. O Visual Studio estava usando o compilador deste pacote específico, e não o compilador que foi instalado de outra forma no computador.

Um aviso ou algo assim teria sido bom do VS2019 :-)

A solução então é atualizar o pacote Microsoft.Net.Compilers para uma versão mais recente.

A versão 1.x é para C # 6 A versão 2.x é para C # 7 A versão 3.x é para C # 8 Como eu consegui resolver isso não foi imediatamente óbvio. O Visual Studio poderia ter sugerido ou sugerido que, ao selecionar uma nova versão nas configurações do projeto, essa configuração agora entrava em conflito com o pacote instalado no projeto.

(Acabei ativando o log do MSBuild no nível de diagnóstico para descobrir qual CSC.EXE o IDE está realmente tentando usar)

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

B1zzle
fonte
1

Se acima de todas as opções não estão funcionando e você usou pacotes nuget como Microsoft.Net.Compilers e CodeDom e ainda não está funcionando, há um problema com o arquivo de projeto aberto do seu arquivo de projeto. O arquivo de projeto está usando uma das opções do compilador que não oferece suporte ao idioma selecionado. Abra o arquivo de projeto com notepad ++ e remova a seguinte linha.

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

Remova as seguintes linhas

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

Eu atualizei o Microsoft.Net.Compilers para a versão 2.0 ou superior

Veja isso

davcup
fonte
0

Eu apenas mudei o langversionpara defaulte funcionou para mim. 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
fonte
0

Limpar solução e construir novamente No meu caso, quaisquer que sejam as configurações anteriores, estavam bloqueando devido à incompatibilidade. Importei um novo projeto e o construí, tentei mudar as versões e tudo. limpar as soluções e construir funcionou para mim.

Sumanstm21
fonte
0

No meu caso, eu estava baixando uma biblioteca com código de amostra de implementação de keycloak por mattorg do GITHUB: https://github.com/mattmorg55/Owin.Security.Keycloak/tree/dev/samples

A solução foi bem fácil, pois usei o .Net Framework 4.6.1, mas o projeto me implorou no início para usar o 4.6.2. Embora eu tenha baixado, ele foi primeiro escolhido ativamente, ao reiniciar todas as instâncias do Visual Studion (ou melhor, fechar todas as instâncias). O projeto foi manipulado para 4.6.1 (embora eu não desejasse e tenha escolhido isso).

Então, depois de escolher a configuração novamente para escolher .Net Framework 4.6.1, o erro desapareceu imediatamente.

pedda
fonte
0

No meu caso, a mensagem de erro foi:

ASPNETCOMPILER: erro CS1617: opção inválida '7.3' para / langversion; deve ser ISO-1, ISO-2, Padrão ou um número inteiro no intervalo de 1 a 6.

Conforme declarado neste problema do GitHub e nesta postagem da VS Developer Community , parece ser um bug em um pacote Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet mais antigo.

Depois de atualizar este pacote NuGet para 3.6.0, o erro ainda persistia em meu aplicativo da web.

Solução

Descobri que tive que excluir uma pasta "bin \ Roslyn" antiga em meu aplicativo da Web para fazer isso funcionar.

Parece que o pacote NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatform mais recente (3.6.0 no meu caso) não traz mais uma pasta "Rosyln" própria e, se presente, a pasta "Roslyn" antiga teve precedência durante a compilação.

Uwe Keim
fonte
0

Isso aconteceu comigo quando retirei meu repositório após movê-lo para um novo local. A solução foi descarregar e recarregar cada projeto que estava apresentando esse erro.

Tentei algumas outras opções, mas nada funcionou para mim. Também nesta situação, meus arquivos de configuração foram configurados para usar a versão 6 da linguagem, portanto, configurá-los para o padrão não corrigiu o problema.

Brendan Sluke
fonte