¿Cómo deshabilito la compatibilidad con C # 6 en Visual Studio 2015?

136

Antecedentes

Tenemos un proyecto que estamos desarrollando en VS 2015 con C # 6 habilitado que ocasionalmente los desarrolladores deben abrir con VS 2013 sin C # 6.

No tenemos intención de usar C # 6 dentro de esta solución en particular (tanto como me gustaría).

Problema

Visual Studio y ReSharper sugieren útiles construcciones de lenguaje C # 6 que hacen que la solución no funcione en versiones anteriores de Visual Studio sin soporte C # 6.

He desactivado el soporte de ReSharper C # 6 pero parece que no puedo desactivar / limitar las características de C # en toda la solución.

Pregunta

¿Cómo limito las capacidades de C # a C # 5 dentro de una solución o dentro de Visual Studio 2015?

SeanKilleen
fuente
17
Ficha Crear, botón Avanzado, Configuración de versión de idioma.
Hans Passant
@HansPassant gracias! Esto es exactamente eso. Lo escribiré en forma de respuesta, pero si publica la respuesta aquí, me aseguraré de marcar la suya como la correcta.
SeanKilleen
¡Exactamente mi problema! excepto que nuestra solución es en 2013, pero quiero seguir usando VS2015 en su lugar.
Anish
@entre no hay necesariamente una necesidad; siempre puede simplemente no usar las funciones de C # 6. Sin embargo, Visual Studio y Resharper sugieren útiles refactorizaciones que utilizan estas características. Siempre que su máquina de compilación admita C # 6, no debería ser un problema.
SeanKilleen
No quiero usar c # 6 ... pero sigo recibiendo esas sugerencias ... las eliminé para compartirlas ... pero pidiendo visual studio ... supongo que visual studio no proporcionará intellisense sugiriendo c # 6 porque mi .net framework es 4.5
harishr

Respuestas:

136

Puede configurar la función de idioma para cada proyecto por separado yendo Properties => Build tab => Advanced button => Language Versiony estableciendo su versión preferida.

Debe darse cuenta de que seguirá utilizando la nueva plataforma de compilación .Net "C # 6.0" (con nombre en código Roslyn). Sin embargo, ese compilador imitará el comportamiento de los compiladores más antiguos y lo limitará a funciones solo disponibles en esa versión de idioma específica.


No creo que haya una configuración disponible para toda la solución.

i3arnon
fuente
1
¿Sabes si hay una configuración equivalente para VB.NET?
Bradley Uffner
2
Recibí mi respuesta hoy temprano. stackoverflow.com/questions/31454902/…
Bradley Uffner
1
Después de los cambios en las propiedades del proyecto, mi Studio solo marca el código C # 6.0 en el editor. Pero no lo trata como un error (se compila correctamente).
Eugene Griaznov
2
Si tiene muchos proyectos, le recomiendo editar el csproj directamente. Agregue lo siguiente dentro del primer PropertyGroupelemento:<LangVersion>5</LangVersion>
mhand
Funciona exactamente de la misma manera para deshabilitar la compatibilidad con C # 7 en VS2017: simplemente use <LangVersion>6</LangVersion>en su lugar.
Paul Suart
49

agregar a continuación en .sln.DotSettingsdebe deshabilitarlo en el nivel de solución

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

O si no tienes un .sln.DotSettingsarchivo:

  1. Si su archivo de solución se llama Apple.sln, cree un archivo al lado llamado Apple.sln.DotSettings.

  2. Dele los siguientes contenidos:

    <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. Cierre y vuelva a abrir la solución, Resharper solo debería advertirle sobre las cosas de C # 5.

  4. ¡No olvide eliminar esto cuando finalmente comience a usar las funciones de C # 6! :)

harishr
fuente
1
Esto debe marcarse como la respuesta, ya que se aplica a todos los proyectos dentro de una solución y es un archivo que puede registrarse.
twoleggedhorse
8
@twoleggedhorse en realidad esta respuesta solo es relevante para Resharper que OP ya deshabilitó, por lo que ni siquiera responde la pregunta.
i3arnon
1
También estoy de acuerdo en que esto debe marcarse como respuesta. OP ha preguntado sobre la configuración de la solución, que SOLO proporciona esta respuesta.
sam-xor
1
Bueno, de todos modos esto no impide que Visual Studio muestre las propias recomendaciones de Microsoft para mejoras de código (era la cuestión real para evitarlas). Esta respuesta funciona para ReSharper, no para Visual Studio (no todos estamos usando ReSharper).
Stephen Reindl
11

Esta herramienta que escribí podría ayudarlo si tiene muchos proyectos para los que necesita establecer LangVersion.

khellang
fuente
10

Puede configurar la función de idioma para todos solutions/csprojlosMSBuildUserExtensionsPath .

Buscar el valor de la $(MSBuildUserExtensionsPath) , debería ser algo así comoC:\Users\$(User)\AppData\Local\Microsoft\MSBuild

Luego edite el archivo Force.LangVersion.ImportBefore.propsen la carpeta $(MSBuildUserExtensionsPath)\14.0\Imports\Microsoft.Common.Props\ImportBeforecon:

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

Los pasos ya se han escrito anteriormente, solo agregando una captura de pantalla más allá de mi VS2015:

Propiedades del proyecto >> Construir >> Avanzado >> Versión de idioma

ingrese la descripción de la imagen aquí

Lo configuré en C # 5.0.

Raghav
fuente
8

Haga clic derecho en Proyecto en el Explorador de proyectos y seleccione Propiedades.

Cuando se abra la pestaña Propiedades, seleccione Construir y haga clic en el botón Avanzar en la parte inferior derecha.

Hay un cuadro desplegable llamado Versión de idioma. Cambie la selección a "C # 5.0"

Nicknow
fuente