.NET週刊【12月第1期 2023-12-06】

2023-12-19 06:00:27

國內文章

.NET 與 OpenEuler 共展翅,昇騰九萬里

https://www.cnblogs.com/shanyou/p/17858385.html

本文介紹了openEuler作業系統,它支援多處理器架構,包括X86、ARM等,並計劃支援更多晶片架構。openEuler社群正通過場景化的特別興趣小組(SIG)擴充套件應用範圍,覆蓋伺服器、雲端計算、邊緣計算到嵌入式等多個場景。作者曾推廣尤拉執行.NET Core,因其對ARM的優秀支援獲得華為雲MVP。同時,文章提到微軟.NET Framework的開源歷程,.NET Core遵循ECMA標準,現已成為全場景開發平臺。中國.NET社群的發展需要優質開源社群支援,openEuler為合作伙伴提供了機會。2023中國.NET開發者峰會將展示科技進步,openEuler作為贊助商參與,邀請更多贊助者加入。

MAUI Blazor 如何通過url使用本地檔案

https://www.cnblogs.com/Yu-Core/p/17855661.html

本文提出了在MAUI Blazor應用中顯示本地媒體檔案的新方法。文章首先指出了之前方案的不足,如不同平臺URL不統一、音視訊檔無法播放、Windows上大檔案顯示限制和iOS/Mac的跨域問題。隨後,文章介紹瞭如何通過修改專案檔案和新增處理ContentType的靜態類來完善方案。具體包括在.csproj檔案中設定基於檔名的多目標,以及建立StaticContentProvider.cs來獲取檔案ContentType。這樣,可以在前端統一使用特定格式的URL來顯示或播放原生的圖片和視訊檔。

【譯】Visual Studio 2022 - 17.8 的效能改進

https://www.cnblogs.com/MeteorSeed/p/17851304.html

Visual Studio 2022 17.8版本帶來了效能提升,包括非同步檔案開啟、改進Razor/Blazor響應性、加速F5、優化C++虛幻引擎智慧感知和加快非SDK風格.NET專案構建。這些更新提高了編碼效率,特別是在處理大檔案和複雜專案時。使用者可通過設定特定屬性來啟用非SDK專案的構建加速。微軟鼓勵使用者反饋,以進一步優化Visual Studio體驗。

.NET中有多少種定時器

https://www.cnblogs.com/czwy/p/17862702.html

本文介紹了.NET中的六種定時器,分為UI定時器和UI無關定時器。UI定時器包括WinForm、WPF和WebForm的定時器,它們在UI執行緒上執行,簡化了執行緒安全問題。WinForm定時器簡單易用,但精度不高;WPF定時器基於Dispatcher,精度不準確,可能延遲;WebForm定時器通過Javascript和伺服器端回撥實現,保證單一非同步回撥。UI無關定時器適用於後臺任務,不涉及UI操作,從.NET 6開始有三種。每種定時器根據應用場景選擇,以滿足不同的精度和執行緒安全需求。

.net下功能強大的HTML解析庫HtmlAgilityPack,資料抓取必備

https://www.cnblogs.com/hanbing81868164/p/17856515.html

本文介紹了HtmlAgilityPack,這是一個.NET平臺的HTML解析庫,能將HTML轉換為DOM物件,支援XPath查詢並提供API進行HTML操作。安裝HtmlAgilityPack需通過Visual Studio的NuGet包管理器。使用時,先載入HTML到HtmlDocument物件,再通過XPath獲取DOM節點,可進行節點修改,如改屬性或內容。還能將DOM物件轉換回HTML文字。文中舉例說明了如何獲取頁面標題、所有圖片和連結。

ASP.NET Core Web API設定響應輸出的Json資料格式的兩種方式

https://www.cnblogs.com/Can-daydayup/p/17860547.html

本文講述了在ASP.NET Core Web API中設定Json響應格式的方法。介紹了兩種JSON序列化庫:內建的System.Text.Json和功能強大的Newtonsoft.Json。文章指出,可以全域性設定Json屬性名稱序列化方式和日期格式,以滿足前端需求。通過範例展示了未設定前的API輸出Json資料,並介紹瞭如何使用System.Text.Json進行全域性設定,以自定義時間輸出格式。

一篇學會cron表示式

https://www.cnblogs.com/goodtimeggb/p/17862867.html

本文介紹了Cron表示式,這是一種在Unix系統中用於定時任務的字串格式,包含六個欄位,用空格分隔。通過數位和特殊字元定義執行時間,如"*"代表所有值,"-"定義範圍。文中提供了Cron表示式的範例,並介紹了在.NET中使用NCrontab和Quartz庫來解析和執行Cron表示式的方法。NCrontab不支援秒級,而Quartz支援,適合需要精確控制的任務。

程式設計技巧 --- VS如何偵錯.Net原始碼

https://www.cnblogs.com/pandefu/p/17860440.html

本文講述了在VS2022中偵錯.Net原始碼的方法。首先,需要在"工具"-"選項"-"文字編輯器"-"C#"-"高階"-"轉到定義"中勾選所有選項以檢視原始碼。其次,要啟用原始碼單步執行,包括取消選擇"啟用僅我的程式碼",選擇"啟用源連結支援",並在"符號"下選擇"Microsoft 符號伺服器"。設定後,首次啟動應用時會有符號載入時間。通過這些設定,可以在"呼叫堆疊"視窗中下載和載入符號進行原始碼偵錯。文章還建議通過實踐提升偵錯技巧,以便更好地理解框架工作原理和提高解決BUG的效率。

小心C#中的唯讀結構體成員

https://www.cnblogs.com/broadm/p/17862169.html

本文講述了C#中結構體的唯讀屬性對程式碼行為的影響。通過範例展示了將結構體成員設為唯讀後,嘗試修改其欄位值時,編譯器不報錯但修改不成功,因為唯讀機制會導致欄位值在堆疊上拷貝。這種隱蔽的行為可能引發BUG,如自旋鎖範例中的計數錯誤。文章建議在結構體或欄位需要唯讀時,使用readonly關鍵字直接修飾,以避免潛在問題。

C# 泛型編譯特性對效能的影響

https://www.cnblogs.com/tansm/p/CSharp-Generic-Performance.html

本文探討了C#中泛型的編譯行為,特別是結構和類作為泛型引數時對效能的不同影響。結構作為值型別,儲存在棧上,泛型引數為結構時編譯器生成特定實現,提升效能,減少裝箱拆箱。類作為參照型別,儲存在堆上,泛型引數為類時編譯器生成通用實現,可能導致效能下降。效能測試顯示結構型別泛型引數效能較高,類型別泛型引數效能略低。

中介軟體IIS監控指標、設定和Windbg偵錯分析

https://www.cnblogs.com/tianqing/p/17864122.html

本文介紹了中介軟體IIS的監控指標和設定最佳實踐。關鍵效能計數器包括Web服務的當前連線數、每秒請求數等,ASP.NET的請求執行時間、請求排隊數等,以及CPU和記憶體的使用情況。最佳實踐建議定期回收應用程式池,合理設定工作程序數,啟用輸出和靜態內容快取,以及壓縮以提升效能。監控和紀錄檔記錄需適度,安全設定要定期更新。IIS請求佇列是處理前臨時存放請求的地方,監控請求佇列的效能計數器有助於優化佇列設定,如增加工作程序數、優化程式碼和調整佇列長度,以減少等待時間,確保請求快速處理。通過這些措施,可以優化IIS伺服器效能。

設計模式(十五)直譯器

https://www.cnblogs.com/WinterSir/p/17506255.html

本文介紹了直譯器模式,這是一種用於構建語言直譯器的設計模式,包含抽象表示式、終結符表示式、非終結符表示式和環境類四個角色。通過這些角色,可以解釋和執行使用者根據特定文法編寫的程式碼。文中以X公司開發的字元介面格式化指令為例,展示瞭如何使用直譯器模式處理指令並輸出格式化內容。環境類儲存指令,抽象節點類負責解釋語句和執行命令。

C#簡化工作之實現網頁爬蟲獲取資料

https://www.cnblogs.com/mingupupu/p/17860491.html

本文介紹了使用C#編寫網頁爬蟲來獲取網站上的氣象資訊。網站共有67頁氣象資料,手動複製貼上效率低下。通過構建每一頁的URL並行送GET請求,成功抓取並儲存了4萬多條資料到資料庫。

主題

C# 日曆 | 降臨節日曆 2023 - Qiita

https://qiita.com/advent-calendar/2023/csharplang

2023 年 C# 降臨節日曆目前正在進行中。

NUnit 4.0.1 | 框架版本 | NUnit 檔案

https://docs.nunit.org/articles/nunit/release-notes/framework.html

NUnit 4.0.0/4.0.1 已釋出。

它包括許多改進和修復,例如對 TestCaseSource 的非同步支援、對 .NET 6 目標的支援和測試取消 (CancelAfter),以及刪除 .NET Framework 3.5、4.0、4.5 和 .NET Core 2.1 等目標.ing.

宣佈 ML.NET 3.0 - .NET 部落格

https://devblogs.microsoft.com/dotnet/announcing-ml-net-3-0/

ML.NET 3.0已釋出。

此版本包括物件檢測 API、問答 (QA) 和命名實體提取 (NER)、Intel oneDAL 硬體訓練加速、AutoML 改進、DataFrame 更新、Tensor 原語整合等。

釋出 v2.5.140 · MessagePack-CSharp/MessagePack-CSharp

https://github.com/MessagePack-CSharp/MessagePack-CSharp/releases/tag/v2.5.140

MessagePack v2.5.140 已釋出。

此版本修復了 Mono 執行時中的錯誤。

2023 年的開發者生態系統:C# 的主要趨勢 | .NET 工具部落格

https://blog.jetbrains.com/dotnet/2023/11/30/the-developer-ecosystem-in-2023-key-trends-for-csharp/

JetBrains 的 C# 開發者生態系統趨勢研究。

ASP.NET Core使用的功能、C#版本、開發目標、IDE/編輯器、外掛的使用等

ReSharper 2023.3 候選版本現已推出 | .NET 工具部落格

https://blog.jetbrains.com/dotnet/2023/11/29/the-resharper-2023-3-rc/

ReSharper 2023.3 候選版本已釋出。

AI 助手增強功能、C# 12 支援、實體框架探索和圖表繪製、UI 改進、改進的 Razor 格式化引擎、用於單元測試的 AI 生成、新語法和拼寫檢查器等等。

Rider 2023.3 候選版本現已推出 | .NET 工具部落格

https://blog.jetbrains.com/dotnet/2023/11/29/the-rider-2023-3-rc/

Rider 2023.3 候選版本已釋出。

包括各種新功能,例如 AI Assistant 增強功能、對 .NET 8 SDK(包括 C# 12 和 F# 8)的支援、改進的多專案啟動、型別依賴關係圖、預測偵錯、單元測試的 AI 生成等等。

六項工作:釋出 ImageSharp 3.1.0

https://sixlabors.com/posts/announcing-imagesharp-310/

ImageSharp 3.1.0 已釋出。

此版本包括對動畫 WebP 和 PNG 的支援、對 Quite Ok (Qoi) 的支援、改進的解碼器可靠性以及各種效能改進。

文章、幻燈片等

最少使用 Blazor Web App 的 OAuth 身份驗證 (ASP.NET Core 8.0)

https://zenn.dev/tetr4lab/articles/1946ec08aec508

瞭解如何在 .NET 8 中的 Blazor Web App 中實現 Google OAuth 身份驗證。

從 BitmapSource 轉換為 Bitmap 的最佳實踐

https://zenn.dev/nuits_jp/articles/2023-12-03-convert-bitmapsource-to-bitmap

介紹一個在WPF中從BitmapSource轉換為Bitmap的好方法。

[無需 Mac] 輕鬆偵錯 .NET MAUI iOS 應用程式並將其部署到 iPhone 的步驟 - Qiita

https://qiita.com/kami_teru/items/b2a6bd77f7c836ae3d1e

如何在實際裝置(例如 iPhone)上從僅在 Windows 上的 Visual Studio 偵錯和執行 .NET MAUI iOS 應用程式。

如何使用 .Net8 Blazor WASM 建立 ASP.Net Core 託管設定

https://zenn.dev/vigilanteyu/articles/d7a47dff63e8e2

如何在 .NET 8 中實現與 Blazor WebAssembly 的 ASP.NET Core Hosted 等效的設定,該設定一直存在於 .NET 7 中。

Visual Basic 2023 回顧 - Qiita

https://qiita.com/yaju/items/97c7d6ae94a303bdbb5b

今年 Visual Basic 主題的綜述,包括 Visual Basic .NET。

使用 IndexedDB 在 .NET MAUI Blazor 混合應用程式中儲存本地資料 - 第 1 部分

https://dev.to/icebeam7/storing-local-data-in-a-net-maui-blazor-hybrid-app-using-indexeddb-part-1-3hn2

瞭解如何使用 IndexedDB 在 .NET MAUI Blazor 混合應用中儲存本地資料。

我評估了 ImageMagick、ImageSharp 和 System.Drawing 的效能

https://zenn.dev/nuits_jp/articles/2023-12-01-imagemagic-imagesharp-benchmarks

影象處理庫 Magick.NET (ImageMagick)、ImageSharp 和 System.Drawing 的效能比較。
本文比較了 .NET Framework 和 .NET 8 之間的解碼、裁剪和二值化處理。

.NET 8.0 如何將 AIS.NET 效能提升 27% | endjin

https://endjin.com/blog/2023/11/how-dotnet-8-boosted-ais-dotnet-performance-by-27-percent-for-free

瞭解在 .NET 8 中執行 AIS.NET(一個用於分析 AIS 解碼器(AIS 是船舶無線電訊息)的庫)時的顯著效能改進。

Visual Studio 17.8 中我最喜歡的功能 - Visual Studio 部落格

https://devblogs.microsoft.com/visualstudio/my-favorite-features-in-visual-studio-17-8/

介紹 Mads Kristensen 推薦的 Visual Studio 2022 版本 17.8 的新功能。

本文重點介紹了保留大小寫的搜尋和替換以及豐富的拉取請求體驗等功能。

[LogProperties] 和新的遙測紀錄檔源生成器背後

https://andrewlock.net/behind-logproperties-and-the-new-telemetry-logging-source-generator/

.NET 8 提供的 Microsoft.Extensions.Telemetry.Abstractions 中包含的「LogProperties」屬性的說明,該屬性將屬性值保留在紀錄檔中。

[All] LINQ,這種情況下會發生什麼? [空陣列怎麼辦? ] - 奇塔

https://qiita.com/RyotaMurohoshi/items/bf45f4e7d52e6aad8ef7

C# 降臨節日曆 2023 年第 1 天文章。解釋極端情況,例如在空陣列上執行 LINQ All 的結果以及存在繫結元素時 OrderBy 的結果。

在 VSCode 2023 中的 C# 中更改塊 {} 之前和之後的換行符 | Aqua Ware Tweet 部落格

https://aquasoftware.net/blog/?p=1975

C# 2023 年降臨節日曆第 2 天文章。如何在 C# 程式碼格式設定中設定大括號之前和之後的開口。

C# 標記在跨平臺開發中的興起

https://platform.uno/blog/the-rise-of-c-markup-for-cross-platform-development/

C#標記介紹,是Uno Platform的UI描述方法在C#中。

C# 開發套件熱過載

https://www.poppastring.com/blog/hot-reload-for-c-dev-kit

如何在 Visual Studio Code 的擴充套件 C# 開發工具包中啟用實驗性功能熱過載。

使用 OmniSharp-Vim 顯示程式碼風格分析結果,例如 IDE0001 - Qiita

https://qiita.com/lx-sasabo/items/4ceb7be5e2721e4e52f8

如何使用 OmniSharp-Vim 顯示來自分析器等的程式碼分析結果。

如何在 .NET 8 中的 Blazor 中將 JavaScript 與靜態伺服器渲染 (SSR) 結合使用

https://zenn.dev/microsoft/articles/aspnetcore-blazor-dotnet8-jsinterop

瞭解如何在 .NET 8 中將靜態伺服器渲染 (SSR) 與 Blazor 結合使用時實現和執行自定義 JavaScript。

.NET 的 HttpClient Timeout 指的是什麼超時? | @jsakamoto

https://devadjust.exblog.jp/29756261/

解釋可以在 HttpClient 上設定的超時實際上如何工作。

將最小的 ASP.NET Web 伺服器嵌入到桌面應用程式中

https://weblog.west-wind.com/posts/2023/Nov/27/Embed-a-minimal-ASPNET-Web-Server-into-a-Desktop-Application

如何在桌面應用程式中包含最小的 ASP.NET Core 伺服器。

[C#] 嘗試 FakeTimeProvider 和 FakeLogger - TekuMemo

https://aneuf.hatenablog.com/entry/2023/11/27/210000

引入「FakeTimeProvider」,它是 .NET 8 中引入的「ITimeProvider」的偽造實現,以及「FakeLogger」,它是新引入的「ILogger」的偽造實現。

[C#] 集合表示式:嘗試使用具有唯一型別的集合表示式(CollectionBuilder 屬性) - TekuMemo

https://aneuf.hatenablog.com/entry/2023/11/24/210000

關於「CollectionBuilderAttribute」,它用自己的型別實現 C# 12 集合表示式,以及如何使用它來實現它。

[C#] 什麼是依賴注入? - Annulus Games

https://annulusgames.com/blog/dependency-injection/

關於依賴注入的說明。服務定位器及其問題、使用 Microsoft.Extensions.DependencyInjection 作為 DI 容器的各種範例、除 M.E.DI 之外的 .NET/Unity DI 容器的介紹等。

庫、儲存庫、工具等。

thomhurst/ModularPipelines:用 C# 編寫管道!

https://github.com/thomhurst/ModularPipelines

一個框架,它組合模組來建立用於某種處理/工作的管道。

nenoNaninu/AspNetCore.SignalR.OpenTelemetry:這是一個檢測庫,用於檢測 ASP.NET Core SignalR 並收集有關 SignalR 集線器方法呼叫的指標和跟蹤。

https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry

用於將 SignalR 指標流式傳輸到 OpenTelemtry 的庫。

https://x.com/nenomake/status/1730229080455303389?s=12

偵錯輸出過濾器 - Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=GrantDavies.NiahTextFilter2022

Visual Studio 擴充套件允許您歷史記錄和過濾偵錯輸出。

網站、檔案等

推文

故事是我能夠使用 Avalonia XPF(Avalonia 的跨平臺 WPF 相容性套件)在瀏覽器中執行 PerfView。

https://twitter.com/AvaloniaUI/status/1729403695392059887


定義空類或介面時,使用「;」宣告它而不使用主體會很方便。

https://x.com/sergiopedri/status/1730233715345826173?s=12


關於在分析時啟動應用程式時暫停分析的功能。

https://x.com/vs_debugger/status/1730647909279166974?s=12


一個關於使用 Ghidra 指令碼使本機 AOT 字串搜尋成為可能的故事。

https://x.com/washi_dev/status/1725270583011688726?s=12


PolySharp 現已提供適用於 C# 12 的新 polyfill。

https://x.com/sergiopedri/status/1729878697824698514?s=12


[InlineArray] 的最大值為 1MB

https://x.com/hypeartistmusic/status/1728123597968011688?s=12&t=ggvrrZ7oLogHyNoIGNgjbw

深入探索

[API 提案]:引入新的記憶體快取庫 · 問題 #4766 · dotnet/extensions

https://github.com/dotnet/extensions/issues/4766

提議引入一種名為 RCache 的新型記憶體高效記憶體快取。

版權宣告

由於筆者沒有那麼多時間對國內的一些文章進行整理,歡迎大家為《.NET週刊-國內文章》板塊進行貢獻,需要推廣自己的文章或者框架、開源專案可以下方的專案地址提交Issue或者在我的微信公眾號私信。

格式如下:

  • 10~50字左右的標題
  • 對應文章或專案網址存取連結
  • 200字以內的簡介,如果太長會影響閱讀體驗

https://github.com/InCerryGit/.NET-Weekly

.NET效能優化交流群

相信大家在開發中經常會遇到一些效能問題,苦於沒有有效的工具去發現效能瓶頸,或者是發現瓶頸以後不知道該如何優化。之前一直有讀者朋友詢問有沒有技術交流群,但是由於各種原因一直都沒建立,現在很高興的在這裡宣佈,我建立了一個專門交流.NET效能優化經驗的群組,主題包括但不限於:

  • 如何找到.NET效能瓶頸,如使用APM、dotnet tools等工具
  • .NET框架底層原理的實現,如垃圾回收器、JIT等等
  • 如何編寫高效能的.NET程式碼,哪些地方存在效能陷阱

希望能有更多志同道合朋友加入,分享一些工作中遇到的.NET效能問題和寶貴的效能分析優化經驗。目前一群已滿,現在開放二群。

如果提示已經達到200人,可以加我微信,我拉你進群: ls1075

另外也建立了QQ群,群號: 687779078,歡迎大家加入。