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.
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.
Respostas:
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=\"Web\" /optionInfer+">
<providerOption name="CompilerVersion" value="v4.0"/>
</compiler>
</compilers>
</system.codedom>
Mude langversion:6
para a parte inferior de 6 para 5 -langversion:5
Consertou para mim. Agradecê-lo.
Se você gostaria de usar C # 6.0:
.config
arquivo para realizar as seguintes modificações.Procure system.codedom
e 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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
Descobri que a causa direta do erro no meu caso foi:
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.
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!
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
no meu caso (projeto criado em outro sistema):
Eu posso executar este projeto.
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
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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
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)
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')" />
Eu apenas mudei o langversion
para default
e 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=\"Web\" /optionInfer+”>
<providerOption name=”CompilerVersion” value=”v4.0″/>
</compiler>
</compilers>
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.
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.
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.
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.
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.