.NET週刊【9月第1期 2023-09-03】

2023-09-08 12:00:51

國內文章

如何正確實現一個自定義 Exception

https://www.cnblogs.com/kklldog/p/how-to-design-exception.html

最近在公司的專案中,編寫了幾個自定義的 Exception 類。提交 PR 的時候,sonarqube 提示這幾個自定義異常不符合 ISerializable patten. 花了點時間稍微研究了一下,把這個問題解了。今天在此記錄一下,可能大家都會幫助到大家。

細聊C# AsyncLocal如何在非同步間進行資料流轉

https://www.cnblogs.com/wucy/p/17654645.html

在非同步程式設計中,處理非同步操作之間的資料流轉是一個比較常用的操作。C#非同步程式設計提供了一個強大的工具來解決這個問題,那就是AsyncLocal。它是一個執行緒本地儲存的機制,可以在非同步操作之間傳遞資料。它為我們提供了一種簡單而可靠的方式來共用資料,而不必擔心執行緒切換或非同步上下文的變化。本文我們將探究AsyncLocal的原理和用法,並進行相關原始碼解析。探討它如何在非同步操作之間實現資料的流轉,以及它是如何在底層工作的。

【微信自動化】使用C#實現微信自動化

https://www.cnblogs.com/1996-Chinese-Chen/p/17663064.html

上個月,在一個群裡摸魚划水空度日,看到了一個老哥分享的一個微信自動化的一個類庫,便下載了他的Demo,其本意就是模擬滑鼠來操作UI,實現UI自動化;然後自己在瞎琢磨研究,寫了一個簡單的例子,用來獲取好友列表,獲取聊天列表,以及最後一次接收或者傳送訊息的時間,以及最後一次聊天的內容,還有自動刷朋友圈,獲取朋友圈誰發的,發的什麼文字,以及配的圖片是什麼,什麼時候發的,再就是一個根據獲取的好友列表,來實現給指定好友傳送訊息的功能。

在.NET Framework中使用RocketMQ(阿里雲版)實戰

https://www.cnblogs.com/kimiliucn/p/17662052.html

https://www.cnblogs.com/kimiliucn/p/17667200.html

在開發某一個需求的時候,領導要求使用RocketMQ(阿里雲版) 作為訊息佇列。使用的版本是5.x,目前也已經沒有4.x購買的入口了,所以只能買5.x系列。公司專案還是用的比較老的技術.NET Framework 4.8,生產者主要有WebAPI/MVC/JOB(控制檯應用程式),然後消費者採用的是Windows服務進行長連結消費資訊。這期間因為各種原因踩過很多坑,然後諮詢了客服說RocketMQ(阿里雲版)5.0不支援.NET Framework,但最終操作下來竟然能使用(只支援叢集模式,不支援訂閱模式),那今天[西瓜程式猿]來記錄一下如何使用RocketMQ(阿里雲版),給各位小夥伴作為參考防止踩坑。

如何將專案打包上傳到NuGet伺服器(圖文教學)

https://www.cnblogs.com/kimiliucn/p/17675287.html

在我寫[在.NET Framework中使用RocketMQ(阿里雲版)]這篇部落格的時候,因為封裝了很多程式碼在單獨的DLL中,包括生產者、消費者以及官方SDK等等,然後都在部落格中體現出來導致部落格大量程式碼,然後有位讀者就建議打包成NuGet包,大家也可以直接安裝引入呼叫,我也覺得很不錯,於是就有了這篇文章啦!

C#/.NET/.NET Core優秀專案和框架8月簡報

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

收集了8月份一些優秀的.NET專案和框架。

WPF使用Blazor的快速案例

https://www.cnblogs.com/hejiale010426/p/17671769.html

下面我們將講解在WPF中使用Blazor,並且使用Blazor做一些檔案編輯操作,下面是需要用到的東西:WPF、Blazor、Masa Blazor、Monaco。

MAUI+Masa Blazor APP 各大商店新手釋出指南(三)vivo篇

https://www.cnblogs.com/MASA/p/17669118.html

上架vivo商店,使用廠家的離線推播當然是一個重要原因,與小米不同,vivo的推播服務可以在應用未上架的情況下通過新增測試手機的方式進行測試。

C#中的淺拷貝與深拷貝

https://www.cnblogs.com/wml-it/p/17667229.html

眾所周知,C#中有兩種型別變數:那就是值型別參照型別。對於值型別而言,copy就相當於是全盤複製了,真正的實現了複製,屬於深拷貝;而對於參照型別而言,一般的copy只是淺拷貝,只是copy到了參照物件的地址,相當於值傳遞了一個參照指標,新的物件通過地址參照仍然指向原有記憶體中的物件。

.NET Core WebAPI 基礎 檔案上傳

https://www.cnblogs.com/ysmc/p/17666170.html

昨天分享了一個在WebApi中如何接收引數的文章 傳送門,然後有新人小夥伴就問了,那檔案上傳呢,這個怎麼弄,藉此我寫了一個小demo,分享給大家。

通常來說,上傳檔案,我們是使用POST,還是老規矩先上程式碼。

Adapter 介面卡模式簡介與 C# 範例【結構型1】【設計模式來了_6】

https://www.cnblogs.com/hnzhengfy/p/SJMSLL_Adapter.html

如題,使用C#實現介面卡模式。

.NET WebAPI 基礎 FromRoute、FromQuery、FromBody 用法

https://www.cnblogs.com/ysmc/p/17663663.html

最近技術交流群裡,還有不少小夥伴不知道 FromRoute、FromQuery、FromBody 這幾個特性是怎麼使用的,也不清楚它們之間的區別在哪裡,特意寫下這個文章,希望可以幫助到迷茫的小夥伴。

如何將現有的Blazor專案的主題切換寫的更好看?

https://www.cnblogs.com/hejiale010426/p/17662123.html

在現有的系統當中,我們的主題切換會比較生硬,下面我們將基於Masa Blazor實現好看的擴散主題切換的樣式效果。

WPF-封裝自定義雷達圖控制元件

https://www.cnblogs.com/liushuiruobing/p/17661556.html

如題,使用WPF封裝自定義雷達圖控制元件。

主題

【英文】Visual Studio for Mac 停用公告 - Visual Studio 部落格

https://devblogs.microsoft.com/visualstudio/visual-studio-for-mac-retirement-announcement/

Visual Studio for Mac 開發結束的公告。

未來的開發將集中在 Visual Studio 和 Visual Studio Code 上,因此 Visual Studio for Mac 17.6 將是最終版本。將支援到2024年8月31日,即12個月後,以後不會新增新功能或對新框架的支援。

作為替代解決方案,我們建議使用 Visual Studio Code 和 C# Dev Kit、在 Mac 上的 VM 上使用 Visual Studio,以及在 Dev Box(雲上的 VM)上使用 Visual Studio。

  • [JetBrains Rider 歡迎 Visual Studio for Mac 使用者購買新個人訂閱可享受 65% 折扣 | .NET 工具部落格](https://blog.jetbrains.com/dotnet/2023/09/01/65-off-rider /)
    • 公告發布後,JetBrains Rider 個人訂閱可享受 65% 折扣,截止時間為 UTC 時間 6 月 4 日上午 6:00(日本時間 6 月 4 日 15:00)

【英文】釋出 v1.4.0 · microsoft/WindowsAppSDK

https://github.com/microsoft/WindowsAppSDK/releases/tag/v1.4.0

Windows App SDK 1.4.0 釋出。

此版本中的 XAML 島不再是實驗性的,新增了 ItemsView、DesktopAcrylicController 和 MicaController 的可用性改進等等。

【英文】釋出 8.0.0-beta.1 · App-vNext/Polly

https://github.com/App-vNext/Polly/releases/tag/8.0.0-beta.1

Polly 8.0.0-beta.1 已釋出。

此版本正在接受從 alpha 到 beta 的 API 稽核。

【英文】新的 .NET 升級助手版本,具有功能更新和 .NET MAUI 改進! - .NET 部落格

https://devblogs.microsoft.com/dotnet/upgrade-assistant-august-2023-update/

關於 .NET Upgrade Assistant 的 8 月更新。

除了僅將專案檔案更新為 SDK 樣式的功能之外,此版本還包括對 .NET MAUI 遷移的改進,例如使用 CLI 在 macOS 上升級的功能。

【英文】加入我們的 JetBrains .NET Day Online ’23 | .NET 工具部落格

https://blog.jetbrains.com/dotnet/2023/08/30/dotnet-day-online-23/

關於 JetBrains .NET Day Online '23 的公告。

由 JetBrains 主辦的活動將於 9 月 26 日舉行,線上提供 .NET 會議。文章介紹了當前的議程。

【英文】宣佈 freeCodeCamp 推出新的基礎 C# 認證 - .NET 部落格

https://devblogs.microsoft.com/dotnet/announcing-foundational-csharp-certification/

freeCodeCamp 現在提供基本的 C# 認證。

freeCodeCamp 是一家提供程式設計等學習資源的慈善機構,現在增加了 C# 認證考試。與 Microsoft Learn 合作以獲得考試和認證。

【英文】釋出診斷版本 - v7.0.442301 · dotnet/diagnostics

https://github.com/dotnet/diagnostics/releases/tag/v7.0.442301

.NET 診斷工具 v7.0.442301 釋出。

此版本修復了 dotnet-dump/SOS 中的錯誤並新增了 dumpexception 命令。

【英文】宣佈 Appwrite 的新 .NET SDK

https://dev.to/appwrite/announcing-appwrites-new-net-sdk-5028

Appwrite 的 .NET SDK 已釋出。

通過使用此 SDK,您可以在 .NET 中使用 AppWrite 的伺服器端功能。

文章、幻燈片等

【英文】並非所有 O(1) 操作都被視為相等

https://ayende.com/blog/200033-B/not-all-o-1-operations-are-considered-equal?Key=9b63efc3-8651-43b1-a301-6051e87361da

為了減少Dictionary的查詢,我採用了使用List來儲存索引的方法。

【英文】生成 ASCII Art — C# 中的簡單操作方法

https://medium.com/@devleaderca/generate-ascii-art-a-simple-how-to-in-c-1b3f53a972f0

如何生成使用影象中的 ASCII 字元表達陰影的 ASCII 藝術作品。

【英文】NET 8 隨機性指南:探索 2023 年新方法和技術

https://www.thatamazingprogrammer.com/the-art-of-randomness-in-net-8-new-methods-and-techniques

在 .NET 8 中引入新的隨機 API(「GetItem」、「Shuffle」)。

【英文】掌握跨平臺部署:使用 Electron.js 的 Blazor WASM 應用程式並通過 GitHub Actions 自動更新

https://medium.com/@dejandjenic/mastering-cross-platform-deployment-blazor-wasm-applications-with-electron-js-509dc4338450

瞭解如何使用 Electron 打包 Blazor WASM 應用程式,並使用 GitHub Actions 啟用自動更新。

【日文】為什麼C# 8.0中引入的陣列索引器的範圍規範是獨佔結束 - Qiita

https://qiita.com/jun1s/items/a56b80eb5a2dead6617f

關於為什麼 C# 8 中可用於陣列索引器的陣列表示法是排他性結束的討論。

【英文】LINQ 內部原理:速度優化

https://antao-almada.medium.com/linq-internals-speed-optimizations-1d99b53750bb

介紹 LINQ 中的運運算元內發生的優化。

【英文】最小 API 中的表單繫結:探索 .NET 8 預覽版 - 第 7 部分

https://andrewlock.net/exploring-the-dotnet-8-preview-form-binding-in-minimal-apis/

.NET 8 中最小 API 中表單系結的討論。

文章還解釋瞭如何處理 CSRF 對策令牌和各種限制。

【英文】C# Lambda:程式碼拆解

https://ricomariani.medium.com/c-lambdas-a-code-teardown-b345ce255212

關於使用 C# lambda 時機器語言級別的程式碼大小。

【日文】如何在 Azure 應用服務的應用程式設定中設定物件和陣列

https://zenn.dev/microsoft/articles/app-service-array

如何通過 Azure 應用服務應用程式設定中的 Microsoft.Extensions.Configuration 中的環境變數設定來設定物件和陣列。

【英文】使用 C# 測量 Unicode 字串長度

https://khalidabuhakmeh.com/measuring-unicode-string-lengths-with-csharp

關於如何獲取 Unicode 字串的長度。

【英文】Visual Studio 中你可能不知道的 9 個「隱藏」功能

https://blog.elmah.io/9-hidden-features-in-visual-studio-that-you-may-not-know/

介紹 Visual Studio 的 9 個隱藏便利功能。

【英文】在 Kubernetes 上收集 .NET Core 的記憶體轉儲

https://cezarypiatek.github.io/post/memory-dump-on-kubernetes/

如何從 Kubernetes 上執行的 .NET 應用程式獲取記憶體轉儲。

【英文】為.NET 編譯 Rust,只用茶和固執!

https://fractalfir.github.io/generated_html/rustc_codegen_clr_v0_0_1.html

關於我們嘗試將 Rust 編譯為 .NET 的 IL。

【日文】如何使用 System.Text.Josn 將字串數位 "Foo":"1" 反序列化為 int Foo {get;set;}

https://devadjust.exblog.jp/29682981/

當數位表示為 JSON 值的字串時,如何使用 System.Text.Json 將數位轉換並接收為數位。

【英文】實現基於功能標誌的端點過濾器

https://timdeschryver.dev/blog/implementing-a-feature-flag-based-endpoint-filter

關於如何根據端點過濾器中的功能標誌進行操作。

【英文】結構體記憶體佈局優化,實際考慮

https://ayende.com/blog/199841-A/struct-memory-layout-optimizations-practical-considerations?Key=a53d68c5-1801-429b-af30-3fd406eabc6e&

關於class和struct的記憶體佈局差異及優化。

網站、檔案等

推文

Visual Studio Code 的 Avalonia UI 擴充套件已釋出。

https://x.com/avaloniaui/status/1696469591138972127?s=12


您可以使用名為 sizscope 的工具檢查.NET AOT以後的二進位制大小。

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


一個關於使用Interlocked.Increment計算 RPS 等內容如何影響效能的故事。如何有效地計算 RPS (每秒的請求) :

https://x.com/egorbo/status/1697579906106896652?s=12


如何使用 .NET 8 Keyed Service 直接解析 HttpClient。

https://x.com/davidfowl/status/1695590701294145803?s=12

版權宣告

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

抽獎送書活動預熱!!!

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