次の方法で共有


.NET 8.0.100 から .NET 9.0.100 以降の Razor の破壊的変更

このドキュメントでは、.NET 8 の一般リリース (.NET SDK バージョン 8.0.100) から .NET 9 の一般リリース (.NET SDK バージョン 9.0.100) までの Razor の既知の破壊的変更を示します。

@識別子の解析が統合されました

VS 17.10 および .NET 8.0.300 で導入されました

https://github.com/dotnet/razor/pull/10232では、@に従って識別子を解析する方法の動作を調整し、Razor 全体でより一貫性を保ちます。 その結果、以下に示す動作が異なるいくつかのシナリオが発生しました。

逐語的な補間された文字列

フォーム @$"ticket-{i}.png" の文字列が認識されなくなりました。 これは、新しい lexer に変更することで、後のリリースで修正される予定です。それまでは、 $@ を使用して問題を回避します。

C# プリプロセッサ ディレクティブとそれに続く HTML が正しく解析されない

  1. プリプロセッサ ディレクティブは HTML の直前にあります。 このフレーバーは次のようになります。
@{
    #region R
    <h3>@ViewData["Title"]</h3>
    #endregion
}
  1. プリプロセッサ ディレクティブと html の間には有効な C# がありますが、HTML の前に解析を終了するようにパーサーに指示する文字はありません。 これは 1 のバリエーションであり、 switch ステートメントで発生する可能性があります。
@{
    switch (true)
    {
        #region R
        case true:
            <div>@(1 + 1)</div>
            break;
    }
}

以前は、HTML に @ 遷移がある場合、C# プリプロセッサ ディレクティブとそれに続く HTML が正しく解析される場合がありました。 現在、一貫して正しく解析されていません。 これは、新しい lexer に変更することで、後のリリースで解決される予定です。 それまでは、これをコンパイルするための使用可能な回避策があります。

ブロック内の HTML を囲む

HTML は中かっこで囲むことができます。

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

ディレクティブにセミコロンを追加する

#region#endregionなどのディレクティブでは、ディレクティブの後にセミコロンを付けることができます。 これにより、この問題が効果的に回避されます。

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

ディレクティブの後にセミコロンを追加する

#if#endifなどのディレクティブでは、ディレクティブ条件の後にセミコロンを使用できませんが、次の行に配置して空のステートメントを作成できます。

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