ASP.NET Core 在 .NET 6 Preview 2 中的更新
阿新 • • 發佈:2021-03-15
> 原文:[《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