He actualizado mi aplicación web ASP.NET Mvc 5 para usar las nuevas funciones de c # 8.0 a través de Visual Studio 2019 y todo funciona bien hasta que trato de usar estas nuevas funciones dentro de una vista Razor.
Por ejemplo, si trato de usar la nueva expresión de cambio:
@{
ViewBag.Title = "About";
var foo = 1;
var bar = foo switch
{
1 => "one",
2 => "two",
_ => string.Empty
};
}
<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>
<p>Use this area to provide additional information.</p>
El compilador no se quejará hasta que trate de llegar a la página, dándome un error de compilación.
Sospecho que Microsoft.CodeDom.Providers.DotNetCompilerPlatform
debe actualizarse, pero parece que no hay actualizaciones disponibles.
¿Hay alguna forma de usar las características del lenguaje c # 8.0 en las vistas de Razor?
c#
asp.net-mvc
razor
dbraillon
fuente
fuente
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
paquete, pero de alguna manera no puedo hacer que funcione para c # 8.0Respuestas:
.net framework es compatible con C # 7.3 por eso no puede hacer que su Razor View funcione
.net core 3 es compatible con C # 8 y pude hacer que su ejemplo funcione con una aplicación .net Core 3 MVC.
Puede echar un vistazo aquí: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version
Espero que lo de arriba ayude :)
fuente
LangVersion
en mi csproj. Incluso puedo usar la función anulable. Y el código sugerido por el OP compila y funciona bien. Entonces, es interesante por qué esto no funcionaría para una aplicación ASP.NET.<MSNetCompilersNuGetPackageLatestVersion>3.3.1</MSNetCompilersNuGetPackageLatestVersion>
. Puede construir su propio paquete nuget a partir de fuentes y usarlo (o hacer relaciones públicas y obtener comentarios con la esperanza de fusionarlo en maestro).De acuerdo, hay algunas cosas que deben aclararse primero.
De acuerdo con esta respuesta , la versión del lenguaje C # está vinculada con el marco, y C # 8.0 está totalmente disponible para todos los idiomas que admitan .Net Standard 2.1. .NET Framework 4.7.2 y versiones posteriores no son compatibles con .NET Standard 2.1 y no será el caso en el futuro.
Mientras tanto, hay una manera de usar C # 8.0 si especifica LangVersion en cualquier archivo de proyecto .csproj:
Esto habilitará C # 8.0 y algunas características del marco no vinculadas estarán disponibles para usted. Verifique la respuesta del enlace para saber cuál.
Finalmente para responder mi propia pregunta, en este momento, no, no hay forma de usar ninguna de las características de C # 8.0 dentro de una vista Razor. La compilación en tiempo de ejecución parece hacerse con un paquete denominado,
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
por lo que la única forma sería actualizar ese paquete para permitir que se utilicen algunas de las nuevas funciones.Actualizaré esa respuesta tan pronto como obtenga más información.
fuente