Compartir a través de


Cambios importantes en Razor después de .NET 8.0.100 a .NET 9.0.100

En este documento se enumeran los cambios importantes conocidos en Razor después de la versión general de .NET 8 (VERSIÓN 8.0.100 del SDK de .NET) a través de la versión general de .NET 9 (VERSIÓN 9.0.100 del SDK de .NET).

El análisis de @ identificadores se ha unificado

Introducido en VS 17.10 y .NET 8.0.300

En https://github.com/dotnet/razor/pull/10232, ajustamos el comportamiento de cómo se analiza un identificador siguiendo un @ para ser más coherente en Razor. Esto dio lugar a algunos escenarios que tienen un comportamiento diferente, que se enumeran a continuación.

Cadenas interpoladas textuales

Las cadenas del formulario @$"ticket-{i}.png" ya no se reconocen. Esto se corregirá en una versión posterior cambiando a un nuevo lexer; hasta entonces, use $@ para solucionar el problema.

Las directivas de preprocesador de C# seguidas de HTML no se analizan correctamente

  1. La directiva de preprocesador está directamente antes de HTML. Este sabor tiene un aspecto similar al siguiente:
@{
    #region R
    <h3>@ViewData["Title"]</h3>
    #endregion
}
  1. Hay C# válido entre la directiva de preprocesador y el html, pero no tiene un carácter que indique al analizador que finalice el análisis antes del CÓDIGO HTML. Se trata de una variación de 1 y puede producirse con cosas como switch instrucciones:
@{
    switch (true)
    {
        #region R
        case true:
            <div>@(1 + 1)</div>
            break;
    }
}

Anteriormente, las directivas de preprocesador de C# seguidas de HTML a veces se analizarían correctamente si el CÓDIGO HTML tuviera una @ transición en él. Ahora se analiza de forma coherente incorrectamente. Esto se resolverá en una versión posterior cambiando a un nuevo lexer. Hasta entonces, hay soluciones alternativas disponibles para que se compile.

Rodear el CÓDIGO HTML en un bloque

El HTML se puede rodear con llaves.

@{
    #if  DEBUG
    {
        <h3>@ViewData["Title"]</h3>
    }
    #endif
}

Adición de un punto y coma a la directiva

Directivas como #region y #endregion permiten colocar un punto y coma después de la directiva. Esto solucionará eficazmente el problema.

@{
    #region R ;
    <h3>@ViewData["Title"]</h3>
    #endregion
}

Agregar un punto y coma después de la directiva

Las directivas como #if y #endif no permiten punto y coma después de la condición de directiva, pero se puede colocar una en la línea siguiente para crear una instrucción vacía.

@{
    #if  DEBUG
    ;
    <h3>@ViewData["Title"]</h3>
    #endif
}