1. 程式人生 > >ASP.NET Core 在 .NET 6 Preview 2 中的更新

ASP.NET Core 在 .NET 6 Preview 2 中的更新

> 原文:[《ASP.NET Core updates in .NET 6 Preview 2》](https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-6-preview-2/?WT.mc_id=DT-MVP-5003987),作者 [Daniel Roth](https://devblogs.microsoft.com/aspnet/author/danroth27/?WT.mc_id=DT-MVP-5003987) --- [.NET 6 預覽版 2 現已推出](https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-2/?WT.mc_id=DT-MVP-5003987),其中包括許多對 ASP.NET Core 的新改進。 以下是本次預覽版的新內容: - Razor 編譯器更新為使用 Source Generators - Blazor 支援自定義事件引數 - 增加 MVC 檢視和 Razor 頁面的 CSS 隔離 - Blazor 支援從祖先元件中推斷元件的泛型型別 - Blazor 應用程式支援保留預渲染時的狀態 - SignalR – 支援 Nullable 標註 # 馬上開始 想開始在 .NET 6 Preview 2 中使用 ASP.NET Core,請先安裝 [.NET 6 SDK](https://dotnet.microsoft.com/download/dotnet/6.0?WT.mc_id=DT-MVP-5003987)。 如果您正在 Windows 上使用 Visual Studio,我們建議安裝 [Visual Studio 2019 16.10 的最新預覽版](http://visualstudio.com/preview?WT.mc_id=DT-MVP-5003987)。如果您在 macOS 上,我們建議安裝 [Visual Studio 2019 for Mac 8.10](https://docs.microsoft.com/visualstudio/releasenotes/vs2019-mac-preview-relnotes?WT.mc_id=DT-MVP-5003987) 的最新預覽版。 # 升級現有專案 要將現有的 ASP.NET Core 應用程式從 .NET 6 Preview 1升級到.NET 6 Preview 2,您需要: - 更新所有 Microsoft.AspNetCore.* 包的引用到 6.0.0-preview.2.*. - 更新所有 Microsoft.Extensions.* 包的引用到 6.0.0-preview.2.*. 再檢視完整的 ASP.NET Core 在 .NET 6 中的[破壞性改動](https://docs.microsoft.com/dotnet/core/compatibility/6.0?WT.mc_id=DT-MVP-5003987#aspnet-core)列表。 # Razor 編譯器更新為使用 Source Generators 我們在這個預覽版中更新了 Razor 編譯器,使用 C# Source Generators來實現。Source Generators 在編譯過程中執行,並能檢查正在編譯的內容,以生成額外的檔案,與專案的其餘部分一起編譯。我們使用 Source Generators 簡化了 Razor 編譯器,並顯著加快了構建的時間。 下圖顯示了使用新的 Razor 編譯器構建預設的 Blazor Server 和 MVC 模板時的構建時間改進。 ![Razor 構建的效能改進](https://devblogs.microsoft.com/aspnet/wp-content/uploads/sites/16/2021/03/razor-build-perf-improvements.png?WT.mc_id=DT-MVP-5003987) # Blazor 支援自定義事件引數 Blazor 對自定義事件的支援現已擴充套件到支援自定義事件引數。這允許通過自定義事件向 .NET 事件處理程式傳遞任意資料。 例如,您可能希望在使用者貼上文字的同時接收剪貼簿貼上事件。要做到這一點,首先要為您的事件宣告一個自定義的名稱,以及一個 .NET ,該類將持有該事件的事件引數,通過新增以下類到您的專案中: ```cs [EventHandler("oncustompaste", typeof(CustomPasteEventArgs), enableStopPropagation: true, enablePreventDefault: true)] public static class EventHandlers { // 這個靜態類不需要包含任何成員。 // 它只是一個讓我們可以把 [EventHandler] 屬性放在 Razor 編譯器上配置事件型別的地方。 // 這樣將影響編譯器的輸出以及編輯器中的程式碼完成。 } public class CustomPasteEventArgs : EventArgs { // 這些屬性的資料將由自定義的 JavaScript 邏輯提供。 public DateTime EventTimestamp { get; set; } public string PastedData { get; set; } } ``` 一旦這些都到位了,您就會在您的 Razor 元件中得到一個叫做 `@oncustompaste` 的新事件的智慧提醒。例如,在 `Index.razor` 中,您可以按以下方式使用它: ```cs @page "/"

Try pasting into the following text box:

@message

@code { string message; void HandleCustomPaste(CustomPasteEventArgs eventArgs) { message = $"At {eventArgs.EventTimestamp.ToShortTimeString()}, you pasted: {eventArgs.PastedData}"; } } ``` 然而,如果您現在實際執行程式碼,事件將不會觸發。因為還剩下一個步驟,就是新增一些 JavaScript 程式碼,實際為您的新 `EventArgs` 子類提供資料。在您的 `index.html` 或 `_Host.cshtml` 檔案中,新增以下內容: ```html