このドキュメントでは、.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 が正しく解析されない
- プリプロセッサ ディレクティブは HTML の直前にあります。 このフレーバーは次のようになります。
@{
#region R
<h3>@ViewData["Title"]</h3>
#endregion
}
- プリプロセッサ ディレクティブと 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
}
ASP.NET Core