¿Cómo usar C # 6 con el tipo de proyecto de sitio web?


Actualizado un sitio Web existente tipo de proyecto Visual Studio 2015, cambié el marco a 4.6.

Entonces esperaba tener todas esas nuevas características disponibles en mi código detrás de los archivos.

Desafortunadamente estoy recibiendo errores como:

Error CS8026: La característica 'propiedad con cuerpo de expresión' no está disponible en C# 5. Por favor, utilice la versión de idioma 6 o superior.

O por ejemplo:

Error CS8026: La característica 'cadenas interpoladas' no es disponible en C # 5. Por favor, utilice la versión de idioma 6 o superior.

Hice una rápida búsqueda en Google y encontré un tipo que publicaba algunos comentarios en un blog de ScottGu (busque "8026" en la página).

Dado que no entiendo su solución, además de que quiero tener la solución más visible, he creado esta publicación.

Mi pregunta:

¿Cómo puedo tener un proyecto de Visual Studio 2015 de tipo Sitio Web (es decir, no Web Application) para reconocer las características de C# 6?

Author: Uwe Keim, 2015-07-21

7 answers

He probado esto con ASP.NET MVC 5 (probado 5.2.3), y su kilometraje puede variar con otros marcos web, pero solo necesita agregar el paquete Roslyn CodeDom| NuGet

Proveedores de código para el compilador.NET...

Proveedores de código de reemplazo que utilizan las nuevas API de compilador como servicio de.NET Compiler Platform ("Roslyn"). Esto proporciona soporte para nuevas características de lenguaje en sistemas que usan CodeDom (p. ej. ASP.NET compilación en tiempo de ejecución), así como mejorar el rendimiento de compilación de estos sistemas.

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

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

El paquete NuGet debe agregar los archivos DLL y agregar lo siguiente a su web.config.

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

Si aún falta. Trata de sumarte.

 93
Author: jbtule,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-17 17:52:18

Ver también esta entrada de blogde Sayed Ibrahim Hashimi sobre cómo hacer esto a través del IDE VS.

En Visual Studio 2015 Update 1 hemos incluido una nueva característica para simplificar esto. Cuando tiene una solución abierta que tiene al menos un proyecto web que está dirigido a.NET 4.5+ y no tiene el paquete DotNetCompilerPlatform NuGet en el menú del proyecto, verá una nueva opción, Habilitar C# 6 / VB 14 aparecer.
introduzca la descripción de la imagen aquí

 44
Author: Vertigo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-01 16:16:59

Instalé la plataforma DotNetCompilerPlatform como sugirió @jbtule, pero todavía estaba recibiendo los mismos errores.

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

Cerré la solución, eliminé las carpetas bin y obj, luego abrí la solución y reconstruí. Ahora las funciones de C# 6 funcionan.

 11
Author: Jon Crowell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-22 19:16:13

Posibles soluciones, tomadas de los comentarios sobre la publicación del blog de ScottGu (busque "8026" en la página):

Sugerencia de solución 1 (David Taylor)

Agregue estos elementos RTM code dom a web.config:

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

Luego agregue Roslyn y Microsoft.CodeDom.Proveedor.*.dll cosas en su directorio BIN.

Es bastante fácil de configurar, pero me resultó extraño que la plantilla predeterminada no estuviera configurada para ella si seleccionaba. NET 4.6 al crear una nueva " Web Sitio " en VS 2015 RTM.

Sugerencia de solución 2 (Martin)

Más allá del comentario de David Taylor anterior, se parece al sistema.la configuración de codedom es correcta cuando se crea una aplicación web con TargetFramework como la v4.5.2 predeterminada. Cambiar TargetFramework a v4. 6 parece modificar la configuración del compilador para CSharp, de una manera que causa un problema.

Mis soluciones fueron las siguientes:

  1. Archivo/Nuevo / ASP. NET Aplicación web
  2. Seleccione " Web API" plantilla de ASP.NET 4.5.2 Plantillas
  3. Tome una copia del sistema.elemento codedom (y su contenido) en la web.config
  4. Usando Properties / TargetFramework, establezca el Framework de destino en 4.6
  5. Reemplace el sistema modificado.elemento codedom en la web.config con la copia tomada antes de cambiar TargetFramework
  6. Hit F5

La página de inicio debe cargarse como se espera.

Para información, el sistema.contenido de codedom inmediatamente después de cambiar TargetFramework a v4. 6. fue como sigue (nota el uso del tipo " Microsoft.CSharp.CSharpCodeProvider"):

<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>
 11
Author: Uwe Keim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-10 11:57:18

Esto no es para un Proyecto de Sitio Web . Así es como lo haces por un ASP.NET Proyecto MVC.

Puede alternar C# 6 en la interfaz de usuario de Visual Studio. Esta es una opción tan fácil, vale la pena intentarlo primero.

  1. Haga clic derecho en su proyecto y seleccione Propiedades.
  2. Haga clic en la pestaña Build.
  3. La pestaña de compilación tiene un Avanzado... botón en la parte inferior.
  4. Esto abre la Configuración de compilación avanzada como se muestra a continuación. Seleccione C# 6.0.

introduzca la descripción de la imagen aquí

 4
Author: Jess,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-19 18:36:52

Así es como se ve en VS2017 con un proyecto de sitio web:

introduzca la descripción de la imagen aquí

 2
Author: b_levitt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-28 18:35:41

Recibí este error después de realizar CERO cambios en mi proyecto WebAPI. Desinstalé el paquete DotNetCompilerPlatform nuget y lo reinstalé, lo que solucionó el problema.

 0
Author: ComeIn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-07 03:23:50