.NET週刊【11月第4期 2023-11-26】

2023-12-01 12:00:44

國內文章

萬字長文:從 C# 入門學會 RabbitMQ 訊息佇列程式設計

https://www.cnblogs.com/whuanle/p/17837034.html

如題,詳細的介紹RabbitMQ以及C#的使用。

CPF C#跨平臺UI框架開源了

https://www.cnblogs.com/dskin/p/17849896.html

本文介紹了C#的跨平臺UI框架CPF,它支援.NETStandard2.0和net4,可在Windows、Mac、Linux等系統上執行,不依賴系統控制元件,實現了表單和控制元件的透明、異形等效果。CPF採用動畫、資料繫結、Mvvm模式和CSS簡化開發,支援國產CPU平臺。框架使用Skia圖形庫和平臺介面卡,保證了控制元件的自繪和一致性。CPF提供了C#和CSS描述UI和樣式的方式,無需Xaml,且考慮了國內系統相容性。CPF是開源的,可通過克隆或下載編譯,還有擴充套件庫如瀏覽器和視訊播放控制元件。作者鼓勵大家參與開源社群,共同完善CPF。

一套開源、強大且美觀的WPF UI控制元件庫 - HandyControl

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

本文介紹了HandyControl,一套開源的WPF UI控制元件庫,它提供了80多種自定義控制元件,重寫了所有原生樣式,幫助開發者輕鬆建立美觀且互動性強的應用程式。文章還指導如何安裝WPF的Vs開發環境,執行HandyControl專案原始碼,並展示了專案執行截圖。最後,提供了專案的GitHub和Gitee開源地址,並提到該專案已被收錄到C#/.NET/.NET Core優秀專案和框架精選中。

C#/.NET/.NET Core推薦學習書籍(已分類)

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

本文介紹了DotNetGuide技術社群和一系列C#/.NET/.NET Core學習書籍。DotNetGuide是.NET開發者的開源社群,提供學習資料、技術分享、專案推薦等。文章還推薦了多本C#相關書籍,涵蓋CLR、C#語言特性、程式設計技巧等內容,適合不同層次的讀者學習。

Avalonia 實現跨平臺的IM即時通訊、語音視訊通話(原始碼,支援信創國產OS,統信、銀河麒麟)

https://www.cnblogs.com/shawshank/p/17817414.html

本文介紹了基於Avalonia框架的跨平臺即時通訊(IM)軟體開發,該軟體支援文字、表情聊天,檔案傳輸,語音視訊通話和遠端桌面功能。開發環境包括Visual Studio 2022、.NET Core 3.1、C#語言和Avalonia UI框架。作者還分享了自定義訊息型別的核心程式碼,並建議使用Avalonia的0.10.*版本。

自研 Fast.ORM 已全面支援AOT編譯

https://www.cnblogs.com/China-Mr-zhong/p/17852177.html

本文介紹了Fast Framework,這是一個基於.NET 6.0的輕量級ORM框架,支援多種資料庫,具有簡單API、高效能等優點,但目前只支援資料庫先行模式。作者分享了AOT編譯的經驗,包括避免動態獲取方法、不使用Emit和dynamic關鍵字等。專案包含ORM核心、檔案紀錄檔、依賴注入等模組,還有控制檯測試、單元測試和Web測試專案。核心物件包括Ado、DbContext和DbOptions,支援多租戶和主從分離設定。專案開源地址提供了原始碼和AOT編譯範例。

記一次線上客服系統使用者遭勒索,索要茶水費事件的 Windbg 分析與應對

https://www.cnblogs.com/sheng_chao/p/17848742.html

本文記錄了客戶使用線上客服系統時遭受勒索攻擊的事件。通過監測伺服器CPU使用率,發現並解決了後臺服務的異常佔用問題。使用WinDbg工具分析Dump檔案,確定攻擊者通過TCP埠傳送垃圾資料導致伺服器負載過高。最終通過增強埠安全措施,成功識別並拉黑攻擊IP,確保了系統安全穩定執行。同時,文章展示了客服系統的強大功能,如不丟訊息、支援所有瀏覽器和行動端,以及開源社群的貢獻精神。

龍芯釋出 .NET 8 SDK 8.0.100-ea1(試用版)

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

龍芯.NET團隊釋出了基於LoongArch64架構的.NET 8 SDK試用版,自2019年研發以來,已與.NET社群同步開發。新版SDK在生命週期內將持續更新,支援多種64位元作業系統,提供效能優化和安全更新。使用者可通過官方網站下載SDK和相關資源,享受社群最新特性和專業團隊支援。

ConfigureAwait in .NET8

https://www.cnblogs.com/ms27946/p/ConfigureAwait_in_NET8_CN.html

本文討論了.NET中的ConfigureAwait,它通過布林引數控制非同步方法是否在原上下文中繼續執行。預設情況下,非同步方法會在捕獲的上下文中恢復,但使用ConfigureAwait(false)可以在任意執行緒池執行緒上恢復。過去,建議在庫中廣泛使用ConfigureAwait(false),但這一做法已逐漸放棄。文章還糾正了對ConfigureAwait(false)的幾個誤解,比如它並非避免死鎖的好方法,也不意味著方法後續部分一定線上程池執行緒上執行。最後,介紹了.NET8中新增的ConfigureAwait(ConfigureAwaitOptions),它是一個列舉型別,提供了更多設定awaitables的方法,但目前僅適用於Task和Task<T>

.net 溫故知新【14】:Asp.Net Core WebAPI 快取

https://www.cnblogs.com/SunSpring/p/17848185.html

本文討論了快取的概念、作用和實現方式。快取是一種效能優化手段,通過儲存資料來加快資料檢索速度。RFC9111規定了快取控制的標準,特別是Cache-Control響應頭的作用。在Asp.net Core中,通過ResponseCacheAttribute設定max-age可以控制瀏覽器快取。伺服器快取通過響應快取中介軟體實現,但如果使用者端禁用快取或傳送no-cache請求,伺服器快取將不起作用。記憶體快取是另一種快取方式,它使用IMemoryCache在伺服器記憶體中儲存資料。

對 .NET程式2G虛擬地址緊張崩潰 的最後一次反思

https://www.cnblogs.com/huangxincheng/p/17853851.html

本文講述瞭如何在32位元作業系統上通過設定3G開關,解決程式因2G虛擬地址空間限制而頻繁崩潰的問題。文章首先指出,醫療行業常用的老舊系統如XP和Windows7 x86,因使用者態和核心態各佔2G記憶體,導致程式容易崩潰。解決方案包括開啟程式的Large Address Aware和機器級別的3G開關,使程式能使用更多記憶體。驗證是否成功開啟3G,可以通過觀察地址空間或使用windbg工具檢查。

一個基於.NET Core開源、跨平臺的倉儲管理系統

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

本文介紹了ZEQP.WMS,一個基於.NET Core的開源跨平臺倉儲管理系統,支援MSSQL/MySQL資料庫。該系統提供全面的倉庫操作管理,如物品跟蹤、儲存、揀選等,旨在提升自動化和效率。系統採用Colder.Admin.AntdVue框架開發,功能包括倉庫、貨架、客戶、供應商管理等。專案原始碼可在GitHub獲取,同時該專案也被收錄在C#/.NET/.NET Core優秀專案和框架精選中。另外,文章推薦了DotNetGuide技術社群,為.NET開發者提供學習資料、技術分享和交流機會。

一個NET8 AOT編譯的輔助專案,讓你的任何可執行應用快速部署為服務

https://www.cnblogs.com/Start201505/p/17857565.html

本文介紹瞭如何將應用程式轉換為服務,無需重新編碼。作者分享了基於.NET 8的快速開發框架Simple Framework,以及使用WinSW將應用封裝為服務的方法。WinSW依賴.NET環境,而NSSM不依賴,但作者選擇了WinSW。文章還詳細介紹瞭如何構建一個.NET 8 AOT編譯的輔助工具,通過簡單的指令選單來生成組態檔和管理服務,使得服務的啟停變得方便快捷。

你所不知道的ASP.NET Core進階系列(三)

https://www.cnblogs.com/CreateMyself/p/17830637.html

本文討論了模型繫結的細節問題,作者在長時間未更新部落格後繼續探討此話題。文中通過範例程式碼展示了在.NET中使用FromQuery特性進行模型繫結時遇到的問題,即新增屬性後值無法系結。作者分析可能的原因,提出屬性名與引數名或URL鍵名相同(不區分大小寫)可能導致問題,並建議讀者通過分析原始碼來找出根本原因。最後,作者鼓勵讀者不要懷疑自己,因為找到問題原始碼是一個必經的學習過程。

在ASP.NET Core 中使用 .NET Aspire 訊息傳遞元件

https://www.cnblogs.com/powertoolsteam/p/17850840.html

本文介紹瞭如何使用.NET Aspire元件在ASP.NET Core應用中實現與Azure服務匯流排的訊息傳遞。首先需安裝.NET 8.0、.NET Aspire工作負載、Docker桌面和IDE。然後在Azure中設定服務匯流排賬戶,並選擇無密碼身份驗證或連線字串進行身份驗證。接著建立ASP.NET Core專案和Worker Service專案,最後將.NET Aspire Azure服務匯流排元件新增到API。通過這些步驟,可以將訊息傳送到服務匯流排主題供訂閱者使用。

C#12中的Collection expressions(集合表示式語法糖)

https://www.cnblogs.com/chenyishi/p/17843378.html

C#12新增了建立集合的語法糖,支援陣列、Span和泛型集合等型別。通過集合表示式,可簡化集合初始化,還能用".."解構集合,將元素內聯到其他集合。自定義型別也可支援集合表示式,需實現Create方法和應用CollectionBuilderAttribute。

【ASP.NET Core】MVC過濾器:執行流程

https://www.cnblogs.com/tcjiaan/p/17855411.html

本文解釋了MVC中的過濾器,它們是在MVC操作方法呼叫前後進行處理的型別,如授權檢查、資料來源修改等。ASP.NET Core的MVC框架中,過濾器通過實現IFilterMetadata介面來標識,而具體的過濾功能則通過實現不同的介面如IAuthorizationFilter、IResourceFilter等來完成。過濾器可以形成呼叫管道,按順序執行。作者通過程式碼範例展示了過濾器的執行過程。

在Linux平臺下使用.NET Core存取Access資料庫讀取mdb檔案資料

https://www.cnblogs.com/VAllen/p/access-mdb-files-in-linux.html

本文介紹瞭如何在Linux系統下使用C#存取Access資料庫。作者分享了在Ubuntu 22.04.3 LTS上,通過安裝依賴庫如unixodbc和mdbtools,並設定ODBC來實現資料庫存取。文章還提供了組態檔範例和一個簡單的C#專案程式碼,展示了跨平臺資料庫存取的實現方法。

主題

Cake v4.0.0 釋出

https://cakebuildnet.medium.com/cake-v4-0-0-released-475ce3ddd987

Cake v4.0.0 已釋出。

此版本包括對 C# 12 和 .NET 8 的支援、檔案 API 增強功能等。

釋出 NATS.Net v2.0.0 · nats-io/nats.net.v2

https://github.com/nats-io/nats.net.v2/releases/tag/v2.0.0

NATS.Net v2.0.0 已釋出。

它是 NATS 的 .NET 使用者端庫,自 v2.0.0 起它已成為基於 AlterNats 的現代實現。該版本包括核心 NATS 命令支援、JetStream 支援、NATS 服務 API 支援、本機 AOT 支援等。

Npgsql 8.0 發行說明 | Npgsql 檔案

https://www.npgsql.org/doc/release-notes/8.0.html

Npgsql 8.0 已釋出。

此版本包含新功能,例如對本機 AOT 和 Trimming 的支援、通過 Metrics API 支援 OpenTelemetry 指標以及註冊為金鑰服務。它還包括其他幾個重大更改。

8.0 版本是支援 .NET Framework(.NET Standard 2.0)的最後一個版本,從 9.0 開始將不再支援。

宣佈 .NET Chiseled 容器 - .NET 部落格

https://devblogs.microsoft.com/dotnet/announcing-dotnet-chiseled-containers/

.NET Chiseled Containers 的釋出公告。

Chiseled映象是一個包含Ubuntu釋出的最小元件的容器映象,基於此,我們釋出了包含.NET執行時的映象。

文章闡述了 Chiseled 在容量、依賴關係、漏洞處理等方面的優勢,以及採用 Distroless 時的差異。

宣佈 NuGet.exe 和 NuGet 使用者端 SDK 包支援政策:讓您瞭解情況並確保安全 - NuGet 部落格

https://devblogs.microsoft.com/nuget/announcing-nuget-exe-and-nuget-client-sdk-packages-support-policy-keeping-you-informed-and-secure/

關於 NuGet.exe 和 NuGet 使用者端 SDK 包的支援策略。

本文介紹了對 NuGet.exe 和 NuGet Client SDK 的未來支援。一般來說,更新只會提供給當前版本以及對 Visual Studio 和 .NET SDK 的 LTS 支援,易受攻擊的 NuGet 版本將從 tools.json 中刪除,並且軟體包將被棄用。

Visual Studio 2022 – 17.8 效能增強 - Visual Studio 部落格

https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-8-performance-enhancements/

解釋 Visual Studio 2022 版本 17.8 中的效能改進。

文章包括提高開啟檔案時的響應能力、提高 Razor/Blazor 中的響應能力、加快 F5(偵錯執行)、優化虛幻引擎 C++ 中的 IntelliSense 以及構建非 SDK 風格的 .NET 專案。

Azure Pipelines 和 GitHub Actions 的託管映像執行程式現已完成推出,包括 .NET 8 SDK(*-最新)和 Visual Studio 17.8(windows-最新)

https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2204-Readme.md

Azure Pipelines 和 GitHub Actions 的執行器映像現在包括 .NET 8 SDK 和 Visual Studio 2022 17.8 (Windows)。

https://x.com/timheuer/status/1727006190306287773?s=12&t=ggvrrZ7oLogHyNoIGNgjbw

ServiceStack v8

https://docs.servicestack.net/releases/v8_00

ServiceStack v8 已釋出。

此版本包括 Blazor 和身份驗證等各種專案的模板更新,以及 PHP 的端到端型別化 API 支援等各種改進。

https://x.com/servicestack/status/1726603790453989682?s=12

版本 2.1.0 · microsoft/reverse-proxy

https://github.com/microsoft/reverse-proxy/releases/tag/v2.1.0

Yarp 2.1.0 已釋出。

此版本包括多項錯誤修復和改進。

Tye 實驗的結束 · 問題 #1622 · dotnet/tye

https://github.com/dotnet/tye/issues/1622Tye 旨在成為本地微服務開發工具,隨著 .NET Aspire 的釋出而存檔。

文章、幻燈片等

tannergooding (@[email protected])

https://dotnet.social/@tannergooding/111423937700237917

.NET 中硬體內在函數的簡史和演示等。

主要建構函式 – 在 Rider 和 ReSharper 中使用 C# 12 | .NET 工具部落格

https://blog.jetbrains.com/dotnet/2023/11/23/primary-constructors-using-csharp-12-in-rider-and-resharper/

介紹 Rider 和 ReSharper 中的 C# 12 主建構函式支援。

支援哪些轉換/簡化、雙捕獲警告、引數突出顯示、程式碼風格等。

使用 .NET 8 構建 Arm64 Docker 映象:快速解決方案

https://medium.com/medialesson/building-arm64-docker-images-with-net-8-a-quick-solution-5491a94eb507

建立 Arm64 Docker 映象時,您可以通過在「FROM」中指定「--platform=$BUILDPLATFORM」來確定構建時的平臺。

我想在 .NET 8 Blazor 中儘可能避免使用 InteractiveWebAssembly 進行預渲染

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

如何在 Blazor 中使用 InteractiveWebAssembly,同時儘可能減少預渲染。

為 .NET 8 應用程式設定 GitHub Codespaces

https://dev.to/this-is-learning/set-up-github-codespaces-for-a-net-8-application-5999

如何為 .NET 8 應用程式建立 GitHub Codespaces 環境。

ASP.NET Core 8.0 中的新 Minimal API 功能

https://medium.com/abp-community/new-minimal-apis-features-in-asp-net-core-8-0-683d8a79b18d

快速介紹 .NET 8 中 ASP.NET Core 最小 API 的新功能。

在 ReSharper 2023.3 中視覺化實體框架關係和附加查詢分析 | .NET 工具部落格

https://blog.jetbrains.com/dotnet/2023/11/20/visualize-entity-framework-relationships-and-additional-query-analysis-in-resharper-2023-3/

ReSharper 2023.3 中實體框架的視覺化和查詢分析簡介。

生成實體關係圖、檢查沒有指定長度限制的字串、檢測無法轉換為 SQL 的方法呼叫等等。

現代化 .NET 響應式擴充套件 | endjin

https://endjin.com/what-we-think/talks/modernizing-reactive-extensions-for-dotnet

關於 Rx.NET 從開始到現在的歷史,以及那段時間所做的現代化工作。

C# 12 和 .NET 8 中攔截器的失敗實驗

https://andrewlock.net/a-failed-experiment-with-interceptors-in-csharp-12-and-dotnet-8/

我在嘗試使用 Interceptor(C# 12 的預覽功能)以及列舉和擴充套件方法時遇到了 Roslyn bug。

社群反饋 Building 17.8 和 17.9 預覽版 1 - Visual Studio 部落格

https://devblogs.microsoft.com/visualstudio/community-feedback-building-17-8-17-9-preview-1/

瞭解 Visual Studio 社群的新功能和反饋建議、如何傳送反饋等。

.NET 8 中 Android 資源生成的改進和變化 - .NET 部落格

https://devblogs.microsoft.com/dotnet/android-resource-designer-dotnet-8/

.NET 8 中新引入的存取 Android 資源的機制的說明。

新引入的機制具有諸如減少啟動時間和由於三聚體友好而減小尺寸等優點。

使用 GA 中提供的摘要差異檢視建立拉取請求 - Visual Studio 部落格

https://devblogs.microsoft.com/visualstudio/create-a-pull-request/

引入了從 Visual Studio 2022 17.9 Preview 1 中實現的 IDE 建立拉取請求的功能

假裝它直到你成功...到生產 - .NET 部落格

https://devblogs.microsoft.com/dotnet/fake-it-til-you-make-it-to-product/

引入類來實現 .NET 8 中引入的 fakes(FakeLogger、MetricCollector、ITimeProvider)等。

.NET 之夜派對@品川 - connpass

https://msdevjp.connpass.com/event/303250/

線下活動將於 .NET Conf 2023 Recap Japan 之後舉行。

使用 System.Threading.Channels 的生產者/消費者管道

https://blog.maartenballiauw.be/post/2020/08/26/ Producer-consumer-pipelines-with-system-threading-channels.html

快速介紹 System.Threading.Channels 以及如何使用 Open.ChannelExtensions 構建簡單的管道。

.NET 8:身份驗證和授權的新增功能

https://auth0.com/blog/whats-new-dotnet8-authentication-authorization/

瞭解使用 .NET 8 Identity API 進行基於令牌的身份驗證。

有關 .NET 8 中 Blazor 錯誤處理的注意事項

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

關於ErrorBoundary無法跨不同執行方法處理的問題。

Path.GetDirectoryName() 根據過載的不同而表現不同 - xin9le.net

https://blog.xin9le.net/entry/2023/11/20/212653

Path.GetDirectoryName 方法可能會也可能不會規範路徑分隔符,具體取決於其過載。

.NET 8 中的本機 AOT 編譯

https://medium.com/abp-community/native-aot-compilation-in-net-8-3c9b80a77f06

簡要介紹 .NET 8 中與本機 AOT 相關的更改、如何啟用它以及結果。

C# 12 新功能備忘錄 - Qiita

https://qiita.com/habakino094/items/57dca2d0c49c9c02395a

快速介紹 C# 12 中的新功能。關於主建構函式、集合表示式、任意型別別名和 lambda 引數的預設值。

我不想在 Blazor 中編寫 HTML...(.NET 8 上的 Fluent UI Blazor 版本)

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

如何合併和使用 Fluent UI Blazor。

庫、儲存庫、工具等。

keithwill/VestPocket

https://github.com/keithwill/VestPocket

AOT 的簡單的基於檔案的資料儲存。

JonPSmith/EfCore.SchemaCompare:用於將 EF Core 資料庫模型與資料庫架構進行比較的庫。

https://github.com/JonPSmith/EfCore.SchemaCompare

基於 Entity Framework Core 模型的架構比較庫。

偵錯輸出過濾器 - Visual Studio Marketplace

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

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

https://x.com/mkristensen/status/1726721505193803802?s=12

網站、檔案等

推文

關於 Win2D 1.27.1 和 Windows App SDK 1.1.1 釋出的故事。

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


服務發現 (Microsoft.Extensions.ServiceDiscovery) 現已在 .NET 8 中提供(不需要 Aspire)。

https://x.com/david_whitney/status/1726948359523758347?s=12&t=ggvrrZ7oLogHyNoIGNgjbw


由於 ConcurrentDictionary<K,V>.Count 會加鎖,因此在效能方面是不利的,因此如果您只想判斷是否為空,則應該使用 IsEmpty。

https://x.com/steplyakov/status/1727016474211176784?s=12&t=ggvrrZ7oLogHyNoIGNgjbw


在會議上,他說他正在建立一個工具來視覺化和演示 GC 的運動。

https://x.com/kookiz/status/1726262030418481643?s=12&t=ggvrrZ7oLogHyNoIGNgjbw

版權宣告

由於筆者沒有那麼多時間對國內的一些文章進行整理,歡迎大家為《.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,歡迎大家加入。

抽獎送書活動預熱!!!

感謝大家對我公眾號的支援與陪伴!為慶祝公眾號一週年,抽獎送出一些書籍,請大家關注公眾號後續推文!