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

國內文章

萬字長文:從 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

image-20231201103450297


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

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

image-20231201103522756


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

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

image-20231201103559070


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

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

image-20231201103630242

版權聲明

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

抽獎送書活動預熱!!!

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

image-20230703203249615

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章