<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          .NET 6 Preview 5 中的 ASP.NET Core 更新

          共 9735字,需瀏覽 20分鐘

           ·

          2021-07-05 11:57

          .NET 6 Preview 5 中的 ASP.NET Core 更新

          .NET 6 Preview 5 現(xiàn)已推出,其中包括對 ASP.NET Core 的許多重大改進。

          以下是此預覽版中的新功能:

          • .NET 熱重載更新 dotnet watch
          • ASP.NET Core SPA 模板更新到 Angular 11 和 React 17
          • 在 SVG foreignObject元素中使用 Razor 語法
          • ActionRenderFragment組件參數(shù)指定 null
          • 通過運行時重鏈接減少 Blazor WebAssembly 下載大小
          • 在 Json.NET 輸出格式化程序中寫入磁盤之前可配置的緩沖區(qū)閾值
          • 用于更好地過濾 Kestrel 日志的子類別
          • 更快地獲取和設置 HTTP 標頭
          • IIS 的可配置未消費的傳入緩沖區(qū)大小

          開始

          要在 .NET 6 Preview 5 中開始使用 ASP.NET Core,請安裝 .NET 6 SDK。

          如果你在 Windows 上使用 Visual Studio,我們建議安裝 Visual Studio 2019 16.11 的最新預覽版。Visual Studio 2022 Preview 1也在今天發(fā)布,.NET 6 Preview 5 包含在該版本中。如果您使用的是 macOS,我們建議您安裝 Visual Studio 2019 for Mac 8.10 的最新預覽版。

          要使用 .NET MAUI 和 Blazor 設置跨平臺原生應用程序,請參閱.NET MAUI 入門指南 中的最新說明。請務必查看宣布 .NET MAUI 預覽 5 的博客文章,了解有關此版本中 .NET MAUI 新增功能的所有詳細信息。

          注意:Visual Studio 2022 預覽版 1 尚不支持 .NET MAUI。對于 .NET MAUI 開發(fā),請改用 Visual Studio 2019 16.11 的最新預覽版。

          要安裝用于提前 (AOT) 編譯和運行時重新鏈接的最新 .NET WebAssembly 工具,請從提升的命令提示符運行以下命令:

          dotnet workload install microsoft-net-sdk-blazorwebassembly-aot

          如果您之前安裝了 .NET WebAssembly 工作負載,您可以通過從提升的命令提示符運行以下命令將其更新到 .NET 6 Preview 5:

          dotnet workload update

          注意:使用 Visual Studio 2022 Preview 1 附帶的 .NET 6 Preview 5 SDK 安裝可選 SDK 工作負載存在一個已知問題。要解決此問題,請從 https://dot.net/ 安裝 .NET 6 Preview 5 SDK安裝 Visual Studio 2022 預覽版 1 后的 get-dotnet6。

          升級現(xiàn)有項目

          要將現(xiàn)有的 ASP.NET Core 應用程序從 .NET 6 Preview 4 升級到 .NET 6 Preview 5:

          • 將所有 Microsoft.AspNetCore.* 包引用更新為.6.0.0-preview.5.*
          • 將所有 Microsoft.Extensions.* 包引用更新為.6.0.0-preview.5.*

          要將 .NET MAUI Blazor 應用從 .NET 6 Preview 4 升級到 .NET 6 Preview 5,我們建議從使用 .NET 6 Preview 5 SDK 創(chuàng)建的新 .NET MAUI Blazor 項目開始,然后從原始項目復制代碼。

          查看 .NET 6 的 ASP.NET Core 重大變更的完整列表。

          .NET 熱重載更新 dotnet watch

          我們一直致力于對 .NET 6 的 .NET Hot Reload 進行各種改進。其中一些改進在 .NET 6 Preview 5 中可用,而其他改進仍在進行中,將在未來的預覽更新中完善。

          您不再需要在 launchSettings.json 中指定hotReloadProfile 以使用dotnet watch 來啟用 .NET Hot Reload . 能夠支持熱重載的項目現(xiàn)在會默認啟用 .NET 熱重載。

          當進行了無法熱重載的代碼編輯(“粗魯”編輯)時,dotnet watch現(xiàn)在將詢問您是否要重新啟動應用程序以應用更改:

          watch : Unable to apply hot reload because of a rude edit. Rebuilding the app...
          watch : Unable to handle changes to C:\Users\daroth\Desktop\BlazorApp\Pages\Index.razor.
          watch : Do you want to restart your app - Yes (y) / No (n) / Always (a) / Never (v)?

          這些選項具有以下行為:

          • 選擇 將重新啟動應用程序。
          • 選擇 不會重新啟動應用程序,并且會保持應用程序運行而不應用更改。
          • 當無法熱重新加載更改時,選擇“*始終”*將根據(jù)需要重新啟動應用程序。
          • 選擇 從不 不會重新啟動應用程序并避免將來出現(xiàn)提示。

          您始終可以使用 Ctrl+R 手動重新啟動應用程序。

          注意:此版本中存在一個已知問題,即選擇“*始終”*仍會繼續(xù)提示將來進行粗魯編輯。這將在未來的預覽版本中得到解決。

          要在使用時禁用對 .NET Hot Reload 的支持dotnet watch,請使用命令行選項。--no-hot-reload

          使用 dotnet watch 進行 .NET Hot Reload 現(xiàn)在也將正確檢測 Blazor WebAssembly 應用程序中的“粗魯”編輯。當刷新瀏覽器或在單獨的瀏覽器 Tab 或瀏覽器實例中加載應用程序時,應用于 Blazor WebAssembly 應用程序的更改將重新應用于應用程序。

          ASP.NET Core SPA 模板更新到 Angular 11 和 React 17

          用于 Angular 和 React 的 ASP.NET Core 單頁應用 (SPA) 模板已更新為 Angular 11 和 React 17。我們還希望在未來的 .NET 6 預覽版中將 Angular 模板進一步更新為 Angular 12,因為 Angular 12 已經(jīng)正式發(fā)布了。

          在 SVG foreignObject元素中支持 Razor 語法

          您現(xiàn)在可以在 SVGforeignObject元素中使用 Razor 語法,包括使用 Blazor 組件:

          <svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
              <rect x="0" y="0" rx="10" ry="10" width="200" height="200" stroke="black" fill="none" />
              <foreignObject x="20" y="20" width="160" height="160">
                  <p>@message</p>
              </foreignObject>
          </svg>

          @code {
              string message = "Wow, it's so nice that this text wraps like it's HTML...because that's what it is!";
          }

          我們還進行了大量驗證和測試,以確保 Blazor 對 SVG 場景有良好的支持。我們認為 Blazor 的 SVG 支持現(xiàn)在處于良好狀態(tài)。如果您在此版本的 Blazor 中使用 SVG 遇到任何問題,請通過在GitHub 上創(chuàng)建 Issue 告訴我們。

          ActionRenderFragment組件參數(shù)指定 null

          現(xiàn)在,您可以指定Blazor組件參數(shù)值ActionRenderFragment為 null,從而簡化采取可選的回調(diào)參數(shù)或模板參數(shù)的新組件。

          通過運行時重鏈接減少 Blazor WebAssembly 下載大小

          默認 Blazor WebAssembly 應用程序的最大部分之一是該應用程序依賴的基于 WebAssembly 的 .NET 運行時 ( dotnet.wasm )。Blazor WebAssembly 已經(jīng)支持從 .NET 核心框架庫中修剪未使用的代碼。但是運行時的下載大小一直是固定的。

          并非每個應用程序都需要所有運行時邏輯。例如,很大一部分運行時邏輯和相關數(shù)據(jù)文件是針對全球化場景的。這種全球化支持使 Blazor WebAssembly 應用程序能夠根據(jù)當前文化處理字符串、數(shù)字、日期等。但是對于不需要此功能的應用程序,這些數(shù)據(jù)和邏輯都只是多余的。

          不需要全球化功能的 .NET 應用程序可以選擇不要它,通過在其項目文件中設置InvariantGlobalization屬性為true來使用不變的全球化。在 .NET 5 中,這將允許 Blazor WebAssembly 應用程序避免下載全球化數(shù)據(jù),但仍會包含 .NET 運行時中的相關邏輯。

          在 .NET 6 Preview 5 中,您現(xiàn)在可以使用 .NET WebAssembly 工具(與用于 .NET WebAssembly AOT 編譯的工具相同)重新鏈接運行時以刪除不需要的邏輯并顯著減小運行時的大小。如果您安裝了 .NET WebAssembly 工作負載,則在您發(fā)布應用程序時會自動完成運行時重新鏈接。使用不變?nèi)蚧J綍r,大小減少尤其顯著。

          如果您還沒有安裝 .NET WebAssembly 工具,可以通過從管理員模式的命令提示符運行以下命令來安裝:

          dotnet workload install microsoft-net-sdk-blazorwebassembly-aot

          下表顯示了使用 .NET 5 和 .NET 6 的默認 Blazor WebAssembly 項目的dotnet.wasm傳輸大?。?/p>

          dotnet.wasm傳輸大小 (kB)
          .NET 5 默認884
          .NET 6 默認780
          .NET 6 重新鏈接756
          .NET 6 不變模式393

          在 Json.NET 輸出格式化程序中寫入磁盤之前可配置的緩沖區(qū)閾值

          默認情況下,Newtonsoft.Json 輸出格式化程序(output formatter)在緩沖到磁盤之前在內(nèi)存中緩沖高達 32 KiB 的響應。這是為了避免執(zhí)行同步 IO,但是這會導致其他副作用,例如線程饑餓和應用程序死鎖。但是,如果您的響應大于 32 KiB,則會導致大量可避免的磁盤 I/O。您現(xiàn)在可以在緩沖到磁盤之前配置內(nèi)存閾值。

          public void ConfigureServices(IServiceCollection services)
          {
              services.AddRazorPages()
                      .AddNewtonsoftJson(options =>
                      {
                          options.OutputFormatterMemoryBufferThreshold = 48 * 1024;
                      });
          }

          注意:我們?nèi)匀唤ㄗh使用 System.Text.Json output formatter,除非出于兼容性原因需要 Newtonsoft.Json 序列化程序。System.Text.Json 序列化程序是完全異步的,將有效地適用于任何大小的有效載荷。

          用于更好地過濾 Kestrel 日志的子類別

          在此更改之前,為 Kestrel 啟用詳細日志記錄非常昂貴,因為所有 Kestrel 共享相同的日志記錄類別名稱 (Microsoft.AspNetCore.Server.Kestrel )。我們現(xiàn)在將該類別拆分為多個新的子類別:

          • Microsoft.AspNetCore.Server.Kestrel (當前類別):ApplicationError、ConnectionHeadResponseBodyWrite、ApplicationNeverCompleted、RequestBodyStart、RequestBodyDone、RequestBodyNotEntirelyRead、RequestBodyDrainTimedOut、ResponseMinimumDataRateNotSatisfied、InvalidResponseHeaderRemoved、HeartbeatSlow。
          • Microsoft.AspNetCore.Server.Kestrel.BadRequests:ConnectionBadRequest、RequestProcessingError、RequestBodyMinimumDataRateNotSatisfied。
          • Microsoft.AspNetCore.Server.Kestrel.Connections:ConnectionAccepted、ConnectionStart、ConnectionStop、ConnectionPause、ConnectionResume、ConnectionKeepAlive、ConnectionRejected、ConnectionDisconnect、NotAllConnectionsClosedGracefully、NotAllConnectionsAborted、ApplicationAbortedConnection。
          • Microsoft.AspNetCore.Server.Kestrel.Http2: Http2ConnectionError, Http2ConnectionClosing, Http2ConnectionClosed, Http2StreamError, Http2StreamResetAbort, HPackDecodingError, HPackEncodingError, Http2FrameReceived, Http2FrameSending, Http2MaxConcurrentStreamsReached。
          • Microsoft.AspNetCore.Server.Kestrel.Http3: Http3ConnectionError, Http3ConnectionClosing, Http3ConnectionClosed, Http3StreamAbort, Http3FrameReceived, Http3FrameSending。

          雖然您現(xiàn)有的規(guī)則將繼續(xù)有效(日志過濾應用具有最長匹配類別前綴的規(guī)則),但您現(xiàn)在可以更有選擇性地選擇啟用哪些規(guī)則。例如,使用 Debug為 bad requests 啟用日志記錄的可觀察性開銷大大降低,可以通過以下配置實現(xiàn):

          {
            "Logging": {
              "LogLevel": {
                "Microsoft.AspNetCore.Kestrel.BadRequests""Debug"
              }
            }
          }

          更快地獲取和設置 HTTP 頭

          我們添加了新的 API 以將 System.Net.Http.HeaderNames 所有可用的通用標頭公開為屬性,從而使 Microsoft.AspNetCore.Http.IHeaderDictionary API 更易于使用。例如,下面的內(nèi)聯(lián)中間件使用新 API 獲取/設置請求和響應標頭:

          app.Use(async (context, next) =>
          {
              var hostHeader = context.Request.Headers.Host;
              app.Logger.LogInformation("Host header: {host}", hostHeader);
              context.Response.Headers.XPoweredBy = "ASP.NET Core 6.0-preview5";
              await next.Invoke(context);
              var dateHeader = context.Response.Headers.Date;
              app.Logger.LogInformation("Response date: {date}", dateHeader);
          });

          對于已實現(xiàn)的標頭,get/set訪問器是通過直接轉到字段并繞過查找來實現(xiàn)的。對于未實現(xiàn)的標頭,訪問者可以繞過針對已實現(xiàn)標頭的初始查找并直接執(zhí)行查找 Dictionary<string, StringValues>。這導致兩種情況下的訪問速度更快。

          方法分支類型平均操作/秒Delta
          GetHeaders預覽4純文本25.793 納秒38,770,569.6——
          GetHeaders預覽5純文本12.775 納秒78,279,480.0+101.9%
          GetHeaders預覽4常見的121.355 納秒8,240,299.3——
          GetHeaders預覽5常見的37.598 納秒26,597,474.6+222.8%
          GetHeaders預覽4未知366.456 納秒2,728,840.7——
          GetHeaders預覽5未知223.472 納秒4,474,824.0+64.0%






          SetHeaders預覽4純文本49.324 納秒20,273,931.8——
          SetHeaders預覽5純文本34.996 納秒28,574,778.8+40.9%
          SetHeaders預覽4常見的635.060 納秒1,574,654.3——
          SetHeaders預覽5常見的108.041 納秒9,255,723.7+487.7%
          SetHeaders預覽4未知1,439.945 納秒694,470.8——
          SetHeaders預覽5未知517.067 納秒1,933,985.7+178.4%

          IIS 的可配置未消耗傳入緩沖區(qū)大小

          在此更改之前,IIS 服務器僅緩沖 64 KiB 的未使用請求正文。這導致讀取被限制在最大大小,這會影響大型請求正文(例如大文件上傳)時的性能。在 .NET 6 Preview 5 中,我們將默認緩沖區(qū)大小從 64 KiB 更改為 1 MiB,這應該會提高大型上傳的吞吐量。在我們的測試中,過去需要 9 秒的 700 MiB 上傳現(xiàn)在只需 2.5 秒。

          較大緩沖區(qū)大小的缺點是,當應用程序不能快速讀取請求正文時,每個請求的內(nèi)存消耗會增加。因此,除了更改默認緩沖區(qū)大小外,我們還使緩沖區(qū)大小可配置,允許您根據(jù)工作負載進行調(diào)整。

          public void ConfigureServices(IServiceCollection services)
          {
              services.Configure<IISServerOptions>(
                  options =>
                  {
                      options.MaxRequestBodySize = 64 * 1024;
                  }
              );
          }

          給予反饋

          我們希望您喜歡 .NET 6 中 ASP.NET Core 的這個預覽版本。我們很想知道您對這個版本的體驗。通過在GitHub 上提交問題讓我們知道您的想法。

          感謝您試用 ASP.NET Core!


          歡迎各位讀者加入微信群一起學習交流,
          在公眾號后臺回復“加群”即可~~

          瀏覽 76
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美大屌视频 | 人人草人人插 | 精品国产一区二区三区久久久狼,91精品一 | 美女操逼片 | 视频乱伦毛片 |