Actualicé un proyecto de sitio web existente tipo Visual Studio 2015, cambié el Framework a 4.6.
Entonces esperaba tener todas esas nuevas funciones disponibles en mi código detrás de los archivos.
Lamentablemente recibo errores como:
Error CS8026: La característica 'propiedad con cuerpo de expresión' no está disponible en C # 5. Utilice la versión de lenguaje 6 o superior.
o por ejemplo:
Error CS8026: la función 'cadenas interpoladas' no está disponible en C # 5. Utilice la versión de idioma 6 o superior.
Hice una búsqueda rápida en Google y encontré a un tipo que publicaba algunos comentarios en una publicación de blog de ScottGu (busque "8026" en la página).
Como no entiendo su solución, además de que quiero que la solución sea más visible, he creado esta publicación SO.
Mi pregunta:
¿Cómo puedo tener un proyecto de Visual Studio 2015 del tipo Sitio web (es decir, no Aplicación web ) para reconocer las características de C # 6?
fuente
Respuestas:
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 Roslyn CodeDOM | Paquete NuGet
Proveedores de CodeDOM para el compilador .NET ...
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.
Si aún falta. Intenta sumarte a ti mismo.
fuente
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
y su dependenciaMicrosoft.Net.Compilers
Vea también esta publicación de blog de Sayed Ibrahim Hashimi sobre cómo hacer esto a través del VS IDE.
Actualizar.
VS 2017 y 2019 tienen esta característica movida a Build -> ASP.NET Compilation .
fuente
Instalé DotNetCompilerPlatform como sugirió @jbtule, pero seguía recibiendo los mismos errores.
Cerré la solución, eliminé las carpetas bin y obj, luego abrí la solución y la reconstruí. Ahora las características de C # 6 funcionan.
fuente
Install-Package ...
). También dirigido a 4.6.bin
yobj
.Posibles soluciones, tomadas de los comentarios en la publicación del blog de ScottGu (busque "8026" en la página):
Sugerencia de solución 1 (David Taylor)
Agregue estos elementos dom de código RTM a web.config:
Luego agregue las cosas de Roslyn y Microsoft.CodeDom.Providers. *. Dll en su directorio BIN.
Es bastante fácil de configurar, pero me resultó extraño que la plantilla predeterminada no estuviera configurada si seleccionó .NET 4.6 al crear un nuevo "Sitio web" en VS 2015 RTM.
Sugerencia de solución 2 (Martin)
Además del comentario anterior de David Taylor, parece que la configuración de system.codedom es correcta cuando se crea una aplicación web con TargetFramework como v4.5.2 predeterminado. Cambiar el TargetFramework a v4.6 parece modificar la configuración del compilador para CSharp, de una manera que causa un problema.
Mi solución fue la siguiente:
La página de inicio debe cargarse como se esperaba.
Para obtener información, el contenido de system.codedom inmediatamente después de cambiar TargetFramework a v4.6. fue el siguiente (tenga en cuenta el uso del tipo "Microsoft.CSharp.CSharpCodeProvider"):
fuente
Microsoft.CSharp.CSharpCodeProvider
versión 4.0 significa que no está utilizando Rosyln, por lo tanto, no funcionará para C # 6.0.<LangVersion>
de que elcsproj
archivo sea igual a6
. Puede causar problemas si es otra cosa.Esto no es para un proyecto de sitio web . Así es como lo hace para un proyecto ASP.NET MVC.
Puede alternar C # 6 en la interfaz de usuario de Visual Studio. Esta es una opción tan fácil que vale la pena intentarlo primero.
fuente
<% Eval(whatever) %>
.Así es como se ve en VS2017 con un proyecto de sitio web:
fuente
Recibí este error después de hacer CERO cambios en mi proyecto WebAPI. Desinstalé el paquete nuget DotNetCompilerPlatform y lo reinstalé, lo que solucionó el problema.
fuente