Atualizado um tipo de projeto existente do site Visual Studio 2015, alterei o Framework para 4.6.
Eu esperava ter todos esses novos recursos disponíveis no meu código por trás dos arquivos.
Infelizmente, estou recebendo erros como:
Erro CS8026: O recurso 'propriedade corporal da expressão' não está disponível no C # 5. Use o idioma versão 6 ou superior.
ou por exemplo:
Erro CS8026: O recurso 'seqüências de caracteres interpoladas' não está disponível no C # 5. Use o idioma versão 6 ou superior.
Fiz uma rápida verificação no Google e encontrei um cara postando alguns comentários em um post do ScottGu (pesquise "8026" na página).
Como eu não entendo a solução dele, e quero que a solução seja mais visível, criei esta publicação de SO.
Minha pergunta:
Como posso ter um projeto do Visual Studio 2015 do tipo Site (por exemplo, não Aplicativo da Web ) para reconhecer os recursos do C # 6?
fonte
Respostas:
Eu testei isso com o ASP.NET MVC 5 (teste 5.2.3) e sua milhagem pode variar com outras estruturas da web, mas você só precisa adicionar o Roslyn CodeDOM | Pacote NuGet
Provedores CodeDOM para .NET Compiler ...
https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/
O pacote NuGet deve adicionar os arquivos DLL e adicionar o seguinte ao seu web.config.
Se ainda estiver faltando. Tente se adicionar.
fonte
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
e sua dependênciaMicrosoft.Net.Compilers
Veja também esta postagem do blog de Sayed Ibrahim Hashimi sobre como fazer isso por meio do VS IDE.
Atualizar.
O VS 2017 e 2019 mudaram esse recurso para Build -> Compilação do ASP.NET .
fonte
Instalei o DotNetCompilerPlatform como o @jbtule sugeriu, mas ainda estava recebendo os mesmos erros.
Fechei a solução, excluí as pastas bin e obj, abri a solução e reconstruí-la. Agora, os recursos do C # 6 funcionam.
fonte
Install-Package ...
). Também visando 4.6.bin
eobj
.Possíveis soluções, extraídas dos comentários na postagem no blog de ScottGu (pesquise "8026" na página):
Sugestão de solução 1 (David Taylor)
Adicione estes elementos de código dom RTM ao web.config:
Em seguida, adicione os itens Roslyn e Microsoft.CodeDom.Providers. *. Dll ao diretório BIN.
É fácil de configurar, mas era estranho para mim que o modelo padrão não estivesse configurado para ele se você selecionasse o .NET 4.6 ao criar um novo "Site" no VS 2015 RTM.
Sugestão de solução 2 (Martin)
Além do comentário de David Taylor acima, parece que as configurações system.codedom estão corretas quando um Web App é criado com o TargetFramework como o padrão v4.5.2. Alterar o TargetFramework para v4.6 parece modificar as configurações do compilador do CSharp, de uma maneira que causa um problema.
Minhas soluções alternativas foram as seguintes:
A página inicial deve carregar conforme o esperado.
Para informações, o conteúdo system.codedom imediatamente após alterar o TargetFramework para v4.6. foi o seguinte (observe o uso do tipo "Microsoft.CSharp.CSharpCodeProvider"):
fonte
Microsoft.CSharp.CSharpCodeProvider
versão 4.0 significa que não está usando o Rosyln. Portanto, não funcionará no C # 6.0.<LangVersion>
ocsproj
arquivo é igual a6
. Pode causar problemas se for outra coisa.Isso não é para um projeto de site . É assim que você faz para um projeto ASP.NET MVC.
Você pode alternar C # 6 na interface do Visual Studio. Esta é uma opção tão fácil, vale a pena tentar primeiro.
fonte
<% Eval(whatever) %>
.Aqui está o que parece no VS2017 com um projeto de site:
fonte
Eu recebi esse erro depois de fazer ZERO alterações no meu projeto WebAPI. Desinstalei o pacote de nuget DotNetCompilerPlatform e reinstalei, o que corrigiu o problema.
fonte