Nguon: Microsoft Learn · .NET 8.0

Các breaking changes (thay đổi không tương thích ngược) của Razor compiler kể từ .NET 8

Nguồn: Razor compiler breaking changes since .NET 8

Tài liệu này liệt kê các breaking changes đã biết trong Razor sau lần phát hành chính thức .NET 8 (phiên bản .NET SDK 8.0.100) cho đến lần phát hành chính thức .NET 9 (phiên bản .NET SDK 9.0.100).

Phân tích cú pháp các định danh @ đã được thống nhất

Được giới thiệu trong VS 17.10 và .NET 8.0.300

Trong PR #10232, chúng tôi đã điều chỉnh hành vi của cách một định danh được phân tích cú pháp theo sau @ để nhất quán hơn trên toàn bộ Razor. Điều này dẫn đến một số tình huống có hành vi khác nhau, được liệt kê bên dưới.

Verbatim interpolated strings (Chuỗi nội suy nguyên văn)

Các chuỗi có dạng @$"ticket-{i}.png" không còn được nhận diện nữa. Vấn đề này sẽ được sửa trong một bản phát hành sau bằng cách thay đổi sang lexer (bộ phân tích từ vựng) mới; cho đến lúc đó, hãy sử dụng $@ để giải quyết vấn đề.

Các chỉ thị tiền xử lý C# theo sau bởi HTML không được phân tích cú pháp chính xác

  1. Chỉ thị tiền xử lý nằm ngay trước HTML. Dạng này trông như thế này:
razor
@{
    #region R
    <h3>@ViewData["Title"]</h3>
    #endregion
}
  1. Có C# hợp lệ giữa chỉ thị tiền xử lý và HTML, nhưng nó không có ký tự nào báo cho parser (bộ phân tích cú pháp) biết cần dừng phân tích trước HTML. Đây là một biến thể của trường hợp 1, và có thể xảy ra với các lệnh như switch:
razor
@{
    switch (true)
    {
        #region R
        case true:
            <div>@(1 + 1)</div>
            break;
    }
}

Trước đây, các chỉ thị tiền xử lý C# theo sau bởi HTML đôi khi được phân tích cú pháp chính xác nếu HTML có chuyển đổi @ trong đó. Bây giờ nó được phân tích cú pháp không chính xác một cách nhất quán. Điều này sẽ được giải quyết trong một bản phát hành sau bằng cách thay đổi sang lexer mới. Cho đến lúc đó, có các cách giải quyết (workarounds) để làm cho code biên dịch được.

Bao quanh HTML trong một block (khối lệnh)

HTML có thể được bao quanh bằng dấu ngoặc nhọn.

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

Thêm dấu chấm phẩy vào chỉ thị

Các chỉ thị như #region#endregion cho phép đặt dấu chấm phẩy sau chỉ thị. Điều này sẽ giải quyết vấn đề một cách hiệu quả.

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

Thêm dấu chấm phẩy sau chỉ thị

Các chỉ thị như #if#endif không cho phép dấu chấm phẩy sau điều kiện chỉ thị, nhưng có thể đặt dấu chấm phẩy trên dòng tiếp theo để tạo một câu lệnh rỗng.

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