Pregunta Interpolación de cadenas en una vista Razor?


¿Esto es compatible?

Si es así, ¿hay algún truco para habilitarlo? Supongo que Razor no está utilizando un compilador suficientemente nuevo ... El IDE VS2015 parece estar bien, pero en tiempo de ejecución me estoy poniendo

CS1056: carácter inesperado '$'


76
2018-06-14 17:54


origen


Respuestas:


Actualizar:

A partir de la Actualización 1 de Visual Studio 2015, hay un proceso simple en la GUI para realizar los siguientes pasos. Simplemente haga clic derecho en su proyecto web y seleccione "Habilitar C # 6 / VB 14". Hay más información disponible en la publicación de blog de MSDN, "Nueva función para habilitar C # 6 / VB 14".

Desde que se escribió esta respuesta, esta funcionalidad se ha agregado con la ayuda de un paquete NuGet.

Agregue este paquete Nuget a su solución si está usando MVC5.

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/

El paquete nuget debería modificar su web.config, pero verifique que la siguiente configuración se encuentre en su archivo web.config (y si no lo agrega):

  <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=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

En MVC6, esto está incorporado.


Respuesta original:

<div>
    @($"Hello {this.Model.SomeProperty}")
</div>

Esto solo funciona en C # 6 con MVC6. Incluso si está ejecutando MVC5 con el compilador C # 6, no funcionará.

El truco es que el analizador razor no es lo suficientemente inteligente como para reconocer algunas sintaxis, por lo que debe envolver todo entre paréntesis (debe hacer esto al usar el operador nulo-condicional (?.) en sus vistas de afeitar también).

Dicho esto, la interpolación de cuerdas en Razor es un poco con errores por el momento en MVC6, así que no me sorprendería si hubiera algún problema con eso. si serán abordados o no es otro asunto.


103
2018-06-14 18:13



  1. correr el siguiente comando en su Package Manager Console agregar un requerido CodeDom proveedor de su proyecto. También modifica tu web.config archivo automaticlly para agregar CodeDom requiere configuraciones para ello.

    Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform


  1. Reiniciar el Visual Studio

Nota: Como @Jake mencionado en su comentario bajo esta respuesta, si tiene DotNetCompilerPlatform paquete ya, así que intenta actualizarlo.


9
2017-09-18 02:17