una - ¿Cómo usar C#6 con el tipo de proyecto de sitio web?
paginas web asp.net ejemplos (7)
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?
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.
- Haga clic derecho en su proyecto y seleccione Propiedades .
- Haz clic en la pestaña Construir .
- La pestaña de compilación tiene un botón Avanzado ... en la parte inferior.
- Esto abre la Configuración de compilación avanzada como se muestra a continuación. Seleccione C # 6.0.
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 ...
Proveedores de CodeDOM de reemplazo que usan el nuevo compilador .NET Compiler Platform ("Roslyn") como API de servicio. Esto proporciona soporte para nuevas características de lenguaje en sistemas que usan CodeDOM (por ejemplo, compilación de tiempo de ejecución ASP.NET), 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=/"Web/" /optionInfer+" />
</compilers>
</system.codedom>
Si aún falta. Intenta sumarte a ti mismo.
Instalé DotNetCompilerPlatform como sugirió @jbtule, pero seguía 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 la reconstruí. Ahora las características de C # 6 funcionan.
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:
<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=/"Web/" /optionInfer+"/>
</compilers>
</system.codedom>
A continuación, agregue el material 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:
- Archivo / Nuevo / Aplicación web ASP.NET
- Seleccione la plantilla "Web API" de las plantillas ASP.NET 4.5.2
- Tome una copia del elemento system.codedom (y su contenido) en web.config
- Usando Properties / TargetFramework, establezca Target Framework en 4.6
- Reemplace el elemento system.codedom modificado en web.config con la copia tomada antes de cambiar TargetFramework
- Hit F5
La página de inicio debe cargarse como se esperaba.
Para obtener información, los contenidos del sistema.codedom inmediatamente después de cambiar TargetFramework a v4.6. fue el siguiente (tenga en cuenta 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=/"Web/" /optionInfer+"/>
</compilers>
</system.codedom>
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.
Vea también esta publicación de blog de Sayed Ibrahim Hashimi sobre cómo hacer esto a través del VS IDE.
En Visual Studio 2015 Update 1 hemos incluido una nueva característica para simplificar esto. Cuando tenga una solución abierta que tenga al menos un proyecto web dirigido a .NET 4.5+ y no tenga el paquete DotNetCompilerPlatform NuGet en el menú Proyecto, verá una nueva opción, Habilitar C # 6 / VB 14.