He buscado otras preguntas relacionadas con esto, pero ninguna parece ser lo que estoy buscando.
Tengo un sitio web que se ejecuta en ASP.NET Core con la nueva estructura de proyecto en VS2017. Los archivos de código que utilizan las funciones de C#7 se compilan correctamente. Pero intentar usar esas funciones en una Vista da como resultado una serie de errores sobre la sintaxis. Intenté instalar Roslyn para que se usara al compilar vistas, ya que, por lo que puedo decir, las características de C#7 están disponibles en el paquete Roslyn nuget 2.x y superior. Pero ahora recibo comentarios que dicen explícitamente
error CS8059: la característica 'declaración de variable fuera' no está disponible en C# 6. Utilice la versión de idioma 7 o superior.
En el pasado, verificaba web.config, pero no hay web.config en un proyecto ASP.NET Core que no sea el casi vacío en la raíz para manejar la solicitud desde IIS.
¿Cómo indico que mis vistas deben compilarse con Roslyn ya que eso no se hace hasta el tiempo de ejecución? Al menos supongo que eso solucionaría mi problema en este punto.
Editar: esa pregunta no es un duplicado de esto, como mencioné al principio, también busqué preguntas existentes. Eso es habilitar específicamente las funciones de C#7 en su aplicación en tiempo de compilación, y solo para una aplicación ASP.NET. Estoy usando ASP.NET Core, que no tiene un archivo web.config con ninguna configuración de compilación definida en él. Además, lo que estoy tratando de hacer para las Vistas que se compilan en tiempo de ejecución y pueden estar en un sistema diferente.
Solución:
Para cualquier persona interesada, debe agregar a Roslyn a su proyecto (lo cual sabía), pero también debe configurar RazorViewEngineOptions para usar CSharpParseOptions que indican la versión del idioma (el valor predeterminado es 6). Había hecho esto pero no lo hice correctamente. Necesitaba asignar el resultado de WithLanguageVersion() sobre ParseOptions para reemplazarlos.
services.AddMvc().AddRazorOptions(options => options.ParseOptions = options.ParseOptions.WithLanguageVersion(LanguageVersion.CSharp7));¿Podría probar lo siguiente (recomendado por la gente del equipo central de ASP.NET):
En Startup.cs, en el método ConfigureServices, configure Razor para usar C# 7 haciendo lo siguiente:
services.AddMvc().AddRazorOptions(options => options.ParseOptions = new CSharpParseOptions(LanguageVersion.CSharp7));Así que descubrí que hay algunas opciones de compilación expuestas a las que llama en la llamada ConfigureServices() .
public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc().AddRazorOptions(x => x.ParseOptions.WithLanguageVersion(LanguageVersion.CSharp7)); } El problema es LanguageVersion.CSharp7 da un error si no agrega Roslyn. Así que supongo que es necesario.
Después de agregar a Roslyn, todo se compila bien, PERO la vista aún da un error.
@{ //My view code string s = "1"; int.TryParse(s, out int i); }Entonces, si MVC expone RazorOptions que puede usar para especificar la versión del idioma, ¿por qué no se respeta?