c# - pages - razor views
Cómo hacer que el motor de vista de afeitar use c#6.0 (4)
Las mejores instrucciones paso a paso que pude encontrar para habilitar las características de C # 6 en las plantillas de RazorEngine están aquí: https://github.com/Antaris/RazorEngine/issues/363#issuecomment-273106183
Lo que no se menciona aquí es asegurarse de que al agregar la sección de compiladores a su app.config, el número de versión coincida con la versión del paquete que está instalando. En el comentario era la versión 1.0.3, pero el paquete que instalé tenía 1.0.4 en su lugar, por lo que necesitaba verse así:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
</compilers>
Actualmente, mi motor de vista de afeitar arroja un error que dice "Utilice la versión de lenguaje 6 o superior". Eso puede ser solo una alteración dándome un puntero. Pero, ¿cómo hago uso de la afeitadora c # 6.0. El resto de mi solución en los archivos cs puedo usar todas las nuevas características de la versión 7.
Otras respuestas son bastante buenas, pero encontré un artículo bueno y breve que definitivamente clarifica los pasos para este problema: https://cpratt.co/using-csharp-6-or-7-with-mvc-5/
En breve:
En la consola de Package Manager instala
Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
checka / lo altera Web.config con las siguientes líneas al final:
<system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:7 /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.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:15 /nowarn:41008 /define:_MYTYPE=/"Web/" /optionInfer+" /> </compilers> </system.codedom>
Si está ejecutando esto desde un proyecto 4.5.1
, la actualización a 4.5.2
podría solucionarlo.
De lo contrario, se recomienda instalar este paquete NuGet para proporcionar las nuevas funcionalidades: Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Entonces, haz algo como esto:
<p>@Model.Person?.Name</p>
Podría funcionar. Si no es así, intenta ser explícito así:
<p>@(Model.Person?.Name)</p>
Creo que esto se debe a un error en las plantillas para web.config
cuando el proyecto se actualiza a una versión más nueva del .NET Framework.
Pude solucionarlo yendo a web.config
, buscando el nodo system.codedom
y cambiando el contenido para que se vea así:
<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>