Como desabilito o suporte ao C # 6 no Visual Studio 2015?

136

fundo

Temos um projeto que estamos desenvolvendo no VS 2015 com o C # 6 habilitado que ocasionalmente precisa ser aberto pelos desenvolvedores que usam o VS 2013 sem o C # 6.

Não temos a intenção de usar o C # 6 nessa solução específica (tanto quanto eu gostaria).

Problema

O Visual Studio e o ReSharper sugerem construções úteis da linguagem C # 6 que tornam a solução inoperante em versões anteriores do Visual Studio sem suporte ao C # 6.

Eu desativado o ReSharper C # 6 apoio , mas eu não consigo desativar / limite de C # apresenta em toda a solução.

Questão

Como limite os recursos de C # a C # 5 em uma solução ou no Visual Studio 2015?

SeanKilleen
fonte
17
Guia Build, botão Advanced, configuração da versão Language.
Hans Passant
@HansPassant thanks! É exatamente isso. Escreverei no formulário de respostas, mas se você postar a resposta aqui, marcarei a sua como a correta.
26915 SeanKilleen
Exatamente o meu problema! exceto que nossa solução está em 2013, mas desejo continuar usando o VS2015.
anish 27/05
@entre não há necessariamente uma necessidade; você sempre pode simplesmente não usar os recursos do C # 6. No entanto, o visual studio e o re-sharper sugerem refatorações que utilizam esses recursos. Enquanto sua máquina de compilação suportar C # 6, isso não deve ser um problema.
21815 SeanKilleen
Eu não quero usar c # 6 ... mas ainda estou recebendo essas sugestões .. eu as removi para reaharper .. mas pedindo pelo visual studio ... acho que o visual studio não fornecerá intellisense sugerindo c # 6 porque meu .net O framework é 4.5
harishr

Respostas:

136

Você pode definir o recurso de idioma para cada projeto separadamente, acessando Properties => Build tab => Advanced button => Language Versione definindo sua versão preferida.

Você deve perceber que ele ainda usará a nova plataforma de compilador "C # 6.0" .Net (codinome Roslyn). No entanto, esse compilador imitará o comportamento de compiladores mais antigos e limitará você a recursos disponíveis apenas nessa versão específica do idioma.


Não acho que exista uma configuração disponível para toda a solução.

i3arnon
fonte
1
Você sabe se existe uma configuração equivalente para o VB.NET?
Bradley Uffner
2
Eu recebi minha resposta hoje cedo. stackoverflow.com/questions/31454902/…
Bradley Uffner
1
Após alterações nas propriedades do projeto, meu Studio apenas marca o código C # 6.0 no editor. Mas não o trata como erro (cria com êxito).
Eugene Griaznov
2
Se você tem muitos projetos, recomendo editar o csproj diretamente. Adicione o seguinte dentro do primeiro PropertyGroupelemento:<LangVersion>5</LangVersion>
mhand 3/16/16
Funciona exatamente da mesma maneira para desativar o suporte ao C # 7 no VS2017 - basta usar <LangVersion>6</LangVersion>.
Paul Suart 12/06
49

adicione abaixo em .sln.DotSettingsdeve desativá-lo no nível da solução

<s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">CSharp50</s:String>

Ou se você não possui um .sln.DotSettingsarquivo:

  1. Se o arquivo de solução for chamado Apple.sln, crie um arquivo ao lado chamado Apple.sln.DotSettings.

  2. Forneça o seguinte conteúdo:

    <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
        <s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">CSharp50</s:String>
    </wpf:ResourceDictionary>
  3. Feche e reabra a solução, o Resharper deve avisá-lo apenas sobre as coisas do C # 5.

  4. Não se esqueça de remover isso quando você começar a usar os recursos do C # 6! :)

harishr
fonte
1
Isso deve ser marcado como a resposta, pois se aplica a todos os projetos em uma solução e é possível fazer o check-in de um arquivo. #
Twoleggedhorse
8
@twoleggedhorse, na verdade, essa resposta é relevante apenas ao Resharper, que OP já desativou, por isso nem responde à pergunta.
I3arnon
1
Também concordo que isso deve ser marcado como resposta. A OP perguntou sobre as configurações gerais da solução, que SOMENTE esta resposta fornece.
precisa
1
Bem, de qualquer forma, isso não impede que o Visual Studio mostre as próprias recomendações da Microsoft para aprimoramentos de código (era a questão real de evitá-las). Esta resposta funciona para o ReSharper, não para o Visual Studio (nem todos nós estamos usando o ReSharper).
Stephen Reindl
11

Essa ferramenta que escrevi pode ajudá-lo se você tiver muitos projetos para os quais precisa definir LangVersion.

Khellang
fonte
10

Você pode definir o recurso de idioma para todos os itens solutions/csprojcom MSBuildUserExtensionsPath.

Pesquise o valor de $(MSBuildUserExtensionsPath), deve ser algo comoC:\Users\$(User)\AppData\Local\Microsoft\MSBuild

Em seguida, edite o arquivo Force.LangVersion.ImportBefore.propsna pasta $(MSBuildUserExtensionsPath)\14.0\Imports\Microsoft.Common.Props\ImportBeforecom:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <LangVersion>5</LangVersion>
  </PropertyGroup>
</Project>
fhusson
fonte
9

As etapas já foram escritas acima, apenas adicionando uma captura de tela adicional do meu VS2015:

Propriedades do projeto >> Build >> Advanced >> Versão do idioma

insira a descrição da imagem aqui

Eu defino isso como C # 5.0.

Raghav
fonte
8

Clique com o botão direito do mouse em Projeto no Project Explorer e selecione Propriedades.

Quando a guia Propriedades abrir, selecione Construir e clique no botão Avançar no canto inferior direito.

Há uma caixa suspensa chamada Versão do idioma. Altere a seleção para "C # 5.0"

Nicknow
fonte