Recursos do C # 6.0 não funcionam com o Visual Studio 2015

135

Estou testando o Visual Studio 2015 com C # 6.0, mas os recursos de idioma não estão funcionando. Em um aplicativo Web MVC, o código a seguir é compilado:

if (!string.IsNullOrWhiteSpace(Model.Profile?.TypeName))
{
    // More logic here...
}

No entanto, quando executo o aplicativo via Debug e IIS Express, recebo o seguinte erro:

CS1525: Termo de expressão inválido '.'

Como habilito esses recursos?

Chris Schiffhauer
fonte
1
Parece que é específico do MVC (ou pelo menos específico do ASP.NET), então eu adicionei uma tag - porque o próprio Visual Studio conhece claramente o C # 6 ... você deve examinar onde quer que você configure o MVC em termos de versão do .NET está direcionado ... é possível que exista algo lá que permita especificar o compilador a ser usado.
precisa saber é o seguinte
Talvez você precise adicionar um compilerelemento para o provedor de código de roslyn msdn.microsoft.com/en-us/library/y9x69bzw(v=vs.110).aspx no web.config?
rene
Esse código está em uma página aspx ou Razor? ou código que está em um arquivo .cs?
Erik Funkenbusch 15/01
@ErikFunkenbusch Está em uma página do Razor.
precisa saber é o seguinte
1
Sim, MVC5 não é Roslyn compatível
Erik Funkenbusch

Respostas:

209

Isso funciona no MVC 5 (testado 5.2.3), você só precisa adicionar o pacote roslyn code dom Nuget

Provedores CodeDOM para .NET Compiler ...

Fornecedores de CodeDOM de substituição que usam o novo compilador .NET Compiler Platform ("Roslyn") como APIs de serviço. Isso fornece suporte para novos recursos de linguagem em sistemas que usam o CodeDOM (por exemplo, compilação em tempo de execução do ASP.NET), além de melhorar o desempenho da compilação desses sistemas.

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/

jbtule
fonte
4
Isso deve ser enviado como resposta, porque corrige o problema em vez de precisar atualizar para uma versão beta do MVC.
Daniel Eugen
3
@ Se você está incorreto. O Microsoft.Net.Compilers está relacionado ao Msbuild. os provedores de CodeDOM estão relacionados ao ASP.NET e outras APIs que são compiladas em tempo de execução.
Jbtule
1
Sim você está certo. Eu interpretei / interpretei errado, porque às vezes eles repetem os pacotes com novos nomes e apenas os adicionam como dependências.
David De Sloovere
21
Vale a pena mencionar para reiniciar o Visual Studio. Ele vivia reclamando depois que eu instalei o pacote, mas um reinício fez isso ir embora :)
Siewers
1
@Rono, verifique se a fonte do seu pacote é nuget.org. Como você pode ver no link, é o nome correto e o pacote existe.
Jbtule # 30/15
17

Bem, eu tenho o MVC5 e instalei recentemente o VS 2015.

Instalei o pacote de provedores do CodeDOM, mas não ajudou ... Mas depois disso, percebi que o pacote suporta apenas o framework 4.5, enquanto o framework de destino foi definido como 4.6 durante os testes - ele funciona com o 4.5 ...

Portanto, preste atenção também ao quadro-alvo. Se você possui o 4.5 - basta instalar o pacote Microsoft.CodeDom.Providers.DotNetCompilerPlatform. Mas se você tiver 4.5.1-4.6 como destino, precisará alterar na seção web.config

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

Para C # , basta alterar o tipo para:

type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
Sergey Kljopov
fonte
Isso certamente me ajudou a começar C# 6a trabalhar com ASP.NET 4.6, mas poderia ter sido melhor para postar o código com o correto typejá está lá ...
Serj Sagan
Obrigado, isso estava funcionando quando voltei para casa na terça-feira e depois não funcionou quando voltei na quinta-feira. De alguma forma, esta seção da configuração ficou AWOL, porque eu lembro de tê-la visto quando estava começando a funcionar originalmente!
Carl
16

Eu estava tendo o mesmo problema no Visual Studio 2015. Outra resposta aqui se refere à solução que usei, mas eles especificaram incorretamente a correção e nunca deram esclarecimentos.

No menu Visual Studio, selecione Projeto e você verá o subitem Ativar C # 6 / VB 14, se você estiver tendo esse problema. Selecione este subitem de menu. Ele fará o download dos pacotes corretos do Nuget e os instalará. Depois disso, reinicie o Visual Studio e recarregue sua solução.

Não consigo verificar se isso também corrigirá a seleção Propriedades do projeto> Compilar> Avançado> Versão do idioma para C # 6 ; portanto, convém verificar isso depois de ativar o C # 6 no menu

Tom K
fonte
2
Este subitem não está no meu menu Projeto. Eu tenho o Unity 5.5.2 que abriu minha Comunidade do VS 2015 para criar alguns scripts. Ao adicionar um padrão a uma propriedade, um erro do compilador é mostrado pelo vermelho unline, declarando que eu precisava do c # 6, pois o C # v.4 estava carregado no momento. Sempre que tento selecionar as propriedades do projeto, a tela apenas pisca, mas nenhuma página aparece.
Edward
15

Verifique as propriedades do seu projeto, vá para build, avançado e veja se o C # 6.0 se você não o possui como padrão.

Atualmente, existe um suporte perfeito para MVC5 e C # 6.0 e funciona incrivelmente bem!

Bart Calixto
fonte
18
"O recurso 'operador de propagação nula' não está disponível no C # 5. Use o idioma versão 6 ou superior." não sabia sobre a configuração Avançada, mas parece não funcionar aqui.
juFo 7/09/2015
3
Como você altera a versão padrão para 6 para que eu não precise defini-la em cada projeto?
Mir
3
defina "alguns". isso não funciona na atualização 3. vs 2015
Robert Ivanc 8/16
1
Quando cheguei às propriedades do projeto, não recebi um menu de construção. Se eu for para "Páginas de propriedades", recebo um menu de construção, mas não tenho um botão "avançado" na tela de construção. Tradução, "Isso não funciona" (para mim)
Malcolm Anderson
Minha versão do VS é a Comunidade 2015, atualização 3 (14.0.25431.01)
Malcolm Anderson
10

Incluindo seguir o conselho de instalar o mais recente, Microsoft.CodeDom.Providers.DotNetCompilerPlatformeu também tive que definir minha raiz Web.config system.codedom para finalmente obter todos os erros Visual Studio 2015para desaparecer:

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

Agora reinicie Visual Studioe isso deve ser feito.

Serj Sagan
fonte
6

O Visual Studio 2015 também mostrará um Enable C#6 / VB 14no menu Projeto com um site / aplicativo da Web do ASP.NET selecionado.

Isso irá de fato instalar Microsoft.CodeDom.Providers.DotNetCompilerPlatforme Microsoft.Net.Compilersempacotar seu projeto e adicionar tags apropriadas ao arquivo web.config.

visual studio 2015 - habilite o snipp do cs6

Michal Šuvada
fonte
1
qual guia do site? se você quer dizer propriedades / web, não existe esse recurso lá.
Robert Ivanc
1
No Visual Studio, quando você seleciona algum projeto de Site, a guia Site aparece ao lado da guia Exibir. Lá você pode encontrar esse recurso.
Michal Šuvada
1
Eu votei com baixa no momento, edite para esclarecer exatamente o que você quer dizer, por exemplo, adicionando uma captura de tela.
user247702
Estou tentando corrigir o problema com um site e esse item de menu não está disponível para mim. Observe que outros projetos que não são da Web na mesma solução não têm problemas ao usar os recursos do VB 14. Todos eles têm como alvo o .NET 4.7 e eu instalei o compilador CodeDom.
Andrew S
-1
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:7 /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.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:15 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
JEuvin
fonte