當前位置: 妍妍網 > 碼農

.NET周刊【5月第1期 2024-05-05】

2024-05-14碼農

國內文章

一個開源輕量級的 C#程式碼格式化工具(支持 VS 和 VS Code)

https://www.cnblogs.com/Can-daydayup/p/18164905

CSharpier 是一個開源、免費的 C#程式碼格式化工具,特點是輕量級且依賴 Roslyn 引擎重構程式碼格式。支持的 IDE 包括 Visual Studio (2019 與 2022) 和 Visual Studio Code 等。該計畫在 GitHub 上托管,並被整合到 C#/.NET/.NET Core 優秀計畫框架精選列表中。DotNetGuide 技術社群也推薦使用 CSharpier,並為.NET 開發者提供交流與學習的平台。

.NET 開源、功能強大、跨平台的圖表庫 - LiveCharts2

https://www.cnblogs.com/Can-daydayup/p/18166862

LiveCharts2 是一款.NET 開源圖表、地圖和儀表庫,特點是功能強大、簡單、靈活且跨平台,支持多種平台如 Maui、Uno Platform 等。提供線上 API 文件,並可以透過 NuGet 安裝。為預發行版本,教程舉例說明了如何在 Blazor Wasm 中建立基礎柱狀圖和包含延遲動畫的圖表。

【YoloDeployCsharp】基於.NET Framework 的 YOLO 深度學習模型部署測試平台

https://www.cnblogs.com/guojin-blogs/p/18172502

該計畫是一個基於.NET Framework 4.8 開發的深度學習模型部署測試平台,支持 YOLO 系列模型(YOLOv8 至 YOLOv9)的影像和視訊檢測。模型部署采用 OpenVINO™、TensorRT、ONNX runtime 和 OpenCV DNN 引擎,在多種裝置上提供推理功能。計畫自行開發了 OpenVINO™ 和 TensorRT 的 C#介面,並在 GitHub 上提供源碼。支持的模型包括從 YOLOv5 到 YOLOv9 以及 YOLO World,透過不同的部署工具進行了算力測試。測試結果顯示,在 GPU 上 TensorRT 具有較好的推理速度,而在 CPU 上 OpenVINO 表現出色。計畫源碼已開源於 GitHub,同時提供了相關的搭建和使用教程。

Windows 下繫結執行緒到指定的 CPU 核心

https://www.cnblogs.com/czwy/p/18166365

Windows 作業系統提供了 SetThreadAffinityMask 和 SetProcessAffinityMask 兩個 Win32 函式,用於將執行緒或行程繫結到指定的 CPU 邏輯核心上,以提高執行效率。這兩個函式透過設定處理器關聯掩碼實作繫結,對於超過 64 核心的 CPU 需要使用 SetThreadGroupAffinity。透過範例程式碼可以實作繫結執行緒到特定 CPU 核心並監測執行時間。這種技術可以幫助提升效能,減少緩存未命中,並且對即時系統和並行控制非常有用。但需要註意的是,如果所繫結的 CPU 核心已有高負荷,則可能導致效能降低。

您可知道如何透過 HTTP2 實作 TCP 的內網穿透???

https://www.cnblogs.com/hejiale010426/p/18166935

由於伺服器企業網路站無法直接存取外網,需要透過申請特定埠才能存取外部 IP 和埠,這一過程耗時且繁瑣。因此,開發了利用現有 Http 閘道器埠進行 TCP 服務轉發的 Taibai 計畫,這樣可以避免頻繁的埠申請和審批。計畫中建立了 Taibai.Core 核心類別庫,其中的 DelegatingStream 類繼承自 Stream,並包裝了一個內部流物件,多載了基礎類別的讀寫和定位等方法,以實作特定的流操作功能。

.NET Emit 入門教程:第七部份:實戰計畫 1:將 DbDataReader 轉實體

https://www.cnblogs.com/cyq1162/p/18149511

透過.NET Emit 中間語言編程可以提高程式效能。ORM 實作分為三個階段:初級階段利用程式碼生成器生成基礎增刪改查程式碼,效率高但可維護性低;中級階段使用反射來替代生成器,執行效率低但開發和可繫結性得提高,可透過緩存最佳化;高級階段範例透過 Emit 和 ADO.NET 讀取資料庫數據到實體類,兼顧執行效率和可維護性。CYQ.Data 的程式碼範例展示了如何使用 Emit 將 DbDataReader 轉換到實體物件。

讓.NET 8 支持 Windows Vista RTM

https://www.cnblogs.com/shanyou/p/18173208

Windows 系統每次更新會增加許多 API,導致新開源計畫往往不再支持早期版本的 Windows。.NET 8 AOT 編譯生成的程式需要 Windows 7 SP1 以上版本支持的三個函式,YY-Thunks 計畫透過動態載入和模擬 API 行為,解決了在舊版本 Windows 系統上運行程式的問題。該計畫支持多種編譯器和執行庫,易於透過 NuGet 整合,最新版 v1.0.10-Beta3 支持了.NET 8 的 Native AOT。為確保計畫相容性,開發者應查閱 YY-Thunks 官方文件或源碼。

C#開源的兩款功能強大的錄屏神器

https://www.cnblogs.com/Can-daydayup/p/18170962

ScreenToGif 是由 C#開發的開源螢幕錄制及 GIF 制作工具,ShareX 是基於.NET 的截圖、錄屏軟體。這兩款軟體均被收錄在 C#/.NET/.NET Core 優秀計畫和框架精選中,該精選旨在分享 C#、.NET 領域的最新動態和最佳實踐。DotNetGuide 技術社群提供.NET 相關學習資料、技術分享、計畫框架推薦等,支持開發者交流和成長。

推薦 3 款程式設計師常用的畫圖工具

https://www.cnblogs.com/Can-daydayup/p/18169082

大姚在 DotNetGuide 技術社群微信群中推薦了三款程式設計師常用的畫圖工具。ProcessOn 是一款支持多種圖形和即時協作的線上作圖工具,雖然免費版有檔數量限制,它提供了 AI 生成思維導圖流程圖等功能。Excalidraw 是一款開源的虛擬協作白板,可以手繪風格繪制圖表。Draw.io 是一款無需註冊、完全免費的線上繪圖工具,適合建立多種型別的圖表。這三款工具都被整理到程式設計師常用工具軟體欄目中,供開發者選擇。

.NET CORE 完美支持 AOT 的 ORM SqlSugar 教程

https://www.cnblogs.com/sunkaixuan/p/18170061

AOT 適合於工具類計畫且具有啟動快、禁止反編譯等優點,但不適宜於反射多的業務計畫。SqlSugar 的 AOT 版本經過實踐反復叠代,已支持包括 CodeFirst 和異步方法,並且在生產中投入使用。支持的資料庫有 SqlServer(需要特定配置)、MySql、Sqlite 和 PostgreSQL,Oracle 不支持。提供了 AOT 下的 Hello World 教程和 SqlSugar 的簡單配置,但 AOT 存在功能限制,不適合大型計畫,只有.NET 基礎 API 支持,不支持.NET MVC。

.Net 8.0 下的新 RPC,IceRPC 之試試的新玩法"打洞"

https://www.cnblogs.com/xlgwr/p/18169319

IceRPC 技術使得防火墻無法阻礙客戶端與伺服端之間的通訊,透過新玩法「打洞」,實作了客戶端到伺服端的通訊模式的翻轉。文章詳述了 IceRPC 的呼叫機制,包括呼叫器 invoker 的獲取與使用,以及如何在伺服端推播通知至客戶端。作者還演示了如何透過 Slice 介面實作伺服器向客戶端發送異常溫度警報的推播通知功能。

自動化測試數據生成:Asp.Net Core 單元測試利器 AutoFixture 詳解

https://www.cnblogs.com/ruipeng/p/18163423

AutoFixture 是一個開源的.NET 庫,用於簡化單元測試中的安排階段,並幫助自動生成測試數據。與 Bogus 相比,AutoFixture 的優勢在於其可以自動適應類的變化,減少維護成本。AutoFixture 支持與 NUnit 和 xUnit 等.NET 測試框架無縫整合,並且透過 Create 和 CreateMany 方法,可以便捷地生成各種型別的測試數據例項。

如何基於 surging 跨閘道器跨語言進行緩存降級

https://www.cnblogs.com/fanliang11/p/18173704

Surging 是一個開源的微服務引擎,支持 rpc 服務治理和中介軟體,能夠解決多語言協同研發中的配置統一和數據緩存問題。文章介紹了如何建立和使用攔截器,特別是緩存攔截器,和如何設定緩存鍵。還提供了如何在多語言呼叫中套用緩存攔截以及建立攔截模組的方法。文章解釋了 Surging 的兩種服務呼叫方式:介面代理呼叫和基於 routepath 呼叫,在基於介面的場景中,支持復雜型別參數的緩存攔截。

Blazor 流程編排的藝術:深入 Z.Blazor.Diagrams 庫的使用與實踐

https://www.cnblogs.com/xuzeyu/p/18173547

在.NET 生態中,Blazor 是一個逐漸受到歡迎的前端框架。Z.Blazor.Diagrams 庫基於 Blazor 開發,可以高度自訂和擴充套件,幫助開發者實作流程編排。文章提到庫受 React 圖庫啟發,透過文件和範例幫助開發者快速理解其使用。作者介紹了如何在 Blazor 套用中引入 ZBD,建立流程圖,並自訂節點互動。

Asp-Net-Core 開發筆記:進一步實作非侵入性審計日誌功能

https://www.cnblogs.com/deali/p/18165737

該技術文章介紹了 ASP.NET Core 中透過套用 AOP(面向切面編程)來實作動態審計日誌功能的高級用法。作者對原有程式碼進行了重構,建立了新目錄結構,並設計了 EntityChangeInfo 實體來保存實體變化。同時,對 AuditLog 物件進行了改進,使之包含更詳細的操作日誌資訊。此外,文章還涉及了過濾器(AuditLogAttribute)的簡化改進,省略了部份參數,增加了自動獲取功能。

.Net 8.0 下的新 RPC,IceRPC 之使用 Dev Containers 進行 .NET QUIC 精簡開發

https://www.cnblogs.com/xlgwr/p/18171004

本文是關於如何使用 Dev Containers 進行.NET 的 QUIC 協定開發的指導文章。QUIC 是一個註重效能和安全的傳輸協定,適合遠端程序呼叫(RPCs)。但.NET 對於 QUIC 的跨平台支持有限,因此透過使用 Dev Containers 可以解決這個問題,建立一個可移植、一致的開發環境。文章步驟詳細,提供了建立和配置開發容器的詳細指引。先決條件包括安裝 Docker 和 Visual Studio Code,並透過 VS Code 的 Dev Containers 擴充套件來構建開發容器。最後本文還展示了如何在容器中執行一個簡單的 QUIC 伺服器和客戶端,以及生成伺服器和客戶端程式碼的命令。

.Net 8.0 下的新 RPC,IceRPC 之如何建立連線 connection

https://www.cnblogs.com/xlgwr/p/18173254

IceRPC 支持建立連線,連線是其核心功能,負責發送請求和接收響應。C#中可透過 ClientConnection 類或 ConnectionCache 類建立客戶端連線,操作簡便且可異步連線。伺服端透過 Server 類例項接收連線,並可監聽配置的地址上的新連線。連線既支持客戶端也支持伺服端,且無區別使用同一 API。作者強調實踐重要性,建議持續練習以提升技能,並歡迎交流。

.Net 8.0 下的新 RPC,IceRPC 之"請求"生命線意義非凡

https://www.cnblogs.com/xlgwr/p/18170054

本文討論了在 RPC(遠端程序呼叫)系統中加入請求截止時間的重要性,以及不設截止時間可能給分布式系統帶來的負面影響。文章解釋了超時與截止時間的區別,並強調了在實作強健的分布式系統時,設定適當的截止時間的意義。基於截止時間的機制可以透過攔截器和中介軟體以靈活的方式在 IceRPC 中實作,提升了效能和可靠性。

Unity 熱更--AssetBundle 學習筆記 1.0【AB 包資源載入工具類的實作】

https://www.cnblogs.com/TonyCode/p/18170759

這篇文章主要介紹了如何封裝工具類來管理 AssetBundle 資源的載入。首先實作了一個確保 AB 資源包只載入一次的 LoadAssetBundleManager 單例類,采用 Dictionary 來記錄載入的資源。文章還講解了如何靈活獲取主包路徑、載入依賴包以及實作異步和同步載入資源的方法。最後,提供了解除安裝單個及所有 AB 資源包的功能。

C#的基於.net framework 的 Dll 模組編程(五) - 編程手把手系列文章

https://www.cnblogs.com/lzhdim/p/18148913

本文介紹了在 C#環境中使用 DLL 類別庫的三種方法:靜態類、動態類和表單,只需要參照類別庫並聲明名稱空間即可使用。同時也闡述了如何使用其他 C# DLL 庫,方法與前述相同。針對 VC++的 DLL,需聲明函式定義後方可使用,並給出了呼叫 Windows API 函式的例子。提供了範例下載連結。

主題

宣布推出第一個真正適用於移動、Web、桌面和嵌入式應用程式的 .NET 單一計畫

https://platform.uno/blog/the-first-and-only-true-single-project-for-mobile-web-desktop-and-embedded-in-net/

Uno 平台 5.2 已釋出。

此版本包括對 Skia 渲染器的增強,以實作更好的效能、多視窗支持、對 Uno SDK 的改進、對 .NET 9 預覽版的支持等。

此外,計畫樣版已更新,因此單個計畫現在可以支持所有平台。

  • 釋出 5.2.80 · unoplatform/uno

  • 版本 2.3.7 · mysql-net/MySqlConnector

    https://github.com/mysql-net/MySqlConnector/releases/tag/2.3.7

    MySqlConnector 2.3.7 已釋出。

    此版本修復了多個錯誤。

    .NET Aspire 預覽版 6 - .NET Aspire

    https://learn.microsoft.com/en-us/dotnet/aspire/whats-new/preview-6

    .NET Aspire 預覽版 6 已釋出。

    此版本包括刪除和修改過時的 API、Aspire 儀表板的令牌身份驗證、對 Qdrant 向量資料庫的支持以及其他細微更改。

    介紹 Elastic 的 OpenTelemetry SDK for .NET

    https://www.elastic.co/jp/blog/elastic-opentelemetry-distribution-dotnet-applications

    Elastic .NET OpenTelemetry SDK 的 Alpha 版本現已推出。

    Elastic OpenTelemetry 發行版包括 Elastic 的 OpenTelemetry 的預設配置以及使用 OpenTelemetry SDK 的擴充套件。當前的 alpha 版本與普通版本幾乎沒有區別,但計劃在未來添加更多功能。

    使用 .NET 為 Microsoft AI 構建可延伸閘道器 - .NET 部落格

    https://devblogs.microsoft.com/dotnet/building-a-scalable-gateway-for-microsoft-ai/

    使用 .NET 和 YARP 為 Microsoft 的 Bing 和 Copilot 等 AI 服務構建前端閘道器的案例研究。

    本文介紹了利用 YARP 靈活配置(例如映像、速率限制和動態配置更改)的範例。

    釋出 v8.1.0 · dotnet/orleans

    https://github.com/dotnet/orleans/releases/tag/v8.1.0

    Orleans v8.1.0 已釋出。

    此版本支持與 Aspire 整合,並包含各種修復和改進。

    文章、投影片等

    在 C# 中使用異步檢測阻塞呼叫 | James Crosswell | 程式碼部落格

    https://www.jamescrosswell.dev/posts/async-detecting-blocking-calls

    如何調查異步方法中的阻塞呼叫。

    文章介紹了使用 Ben.BlockingDetector 進行檢測,並將其合並到 Sentry 中,以便可以在 Sentry 上進行確認。

    .NET 正規表式 - 捕獲

    https://zenn.dev/sayurin/articles/76f6739d7ac75f

    關於在 .NET 正規表式中進行捕獲。

    當有多個命名捕獲時該怎麽辦,如何在 F# 中自然地處理命名捕獲等。

    使用主建構函式重構 C# 程式碼 - .NET 部落格

    https://devblogs.microsoft.com/dotnet/csharp-primary-constructors-refactoring/

    關於使用主建構函式進行重構。

    本文介紹了一個範例,將建構函式中傳遞 ILogger 等內容的模式替換為主建構函式。

    組裝 .NET 的 AsciiMath 解析器

    https://andrewlock.net/hacking-together-an-asciimath-parser-for-dotnet/

    如何使用 .NET 中的 AsciiMath 解析器。

    本文介紹了多種語言的 AsciiMath 解析器,並解釋了如何最終使用 Jint 讓 JavaScript 實作可從 .NET 執行。

    配置 ASP.NET Core Minimal API 以進行生產和大規模使用 - Qiita

    https://qiita.com/takashiuesaka/items/654c6e0d0bb7c92854a8

    介紹使用 ASP.NET Core Minimal API 定義和實作 API 時組織程式碼的技術(轉譯)。使用擴充套件方法進行聚合、使用 MapGroup 進行分組等。

  • 組織 ASP.NET Core 最小 API

  • 如何在 OpenTelemetry 中的兩個跨度之間建立連結

    https://dev.to/koma_koma_d/how-to-create-a-link-between-two-spans-in-opentelemetry-424i

    關於如何建立連線 OpenTelemetry 跨度的跨度連結。

    [JWT] 如何解決解碼過程中出現的 Unable to demo the payload 錯誤

    https://zenn.dev/o0rororo0o/articles/028202490cc99d

    對於 Microsoft.AspNetCore.Authentication.JwtBearer 7.0.14 或更高版本,如果 JWT iat 欄位為非數位,則會發生錯誤。

    使用 SearchValues 最佳化 C# 中的字串搜尋

    https://dev.to/admirmujkic/optimizing-string-searches-in-c-with-searchvalues-1105

    關於「SearchValues」類的用法和效能,該類是在.NET 8 中添加的,可以專門定義用於搜尋特定值。

    ReSharper 和 Rider 2024.1 的第一組錯誤修復已釋出 | .NET 工具部落格

    https://blog.jetbrains.com/dotnet/2024/04/17/the-first-set-of-bug-fixes-for-resharper-and-rider-2024-1-are-here/

    ReSharper 和 Rider 2024.1.1 已釋出。

    此版本是 ReSharper 和 Rider 2024.1 的第一個錯誤修復,修復了一些小缺陷。

    itsmattkc/dotnet9x:.NET 2.0 - 3.5 向後移植到 Windows 9x

    https://github.com/itsmattkc/dotnet9x

    嘗試將 .NET Framework 2.0-3.5 向後移植到 Windows 9x 的計畫。

    -[Yajiuma PC Watch]將.NET Framework 反向移植到 Windows 95 的強者出現了

    Visual Studio 會遷移到 .NET Core 並成為多平台嗎?- NDepend 部落格

    https://blog.ndepend.com/visual-studio-multi-platform/

    為了考慮 Visual Studio 是否會轉換為 .NET CoreCLR,我們正在對 Visual Studio 當前的程式集結構進行調查和假設。

    活動

    C#效能學習會(2024/04/27 13:30~)

    https://cs-reading.connpass.com/event/309714/

    現代 C# .NET Web 開發 ~ gRPC、GraphQL、Blazor 也可用 ~ (2024/05/15 19:00~)

    https://sansan.connpass.com/event/316664/

    庫、儲存庫、工具等。

    Cysharp/KcpTransport:KcpTransport 是 RUDP 的純 C# 實作,用於高效能即時網路通訊

    https://github.com/Cysharp/KcpTransport

    KCP 的 .NET 移植實作(基於 UDP 的 RUDP 類協定)。

    網站、文件等

    推文

    當一個局部函式被編譯成 IL 時,它就變成了一個名稱以「g 」開頭的方法

    https://x.com/khyperia/status/1782787967703998667?s=12

    IList<T> 可能會變成 IReadOnlyList<T> 的故事。

    https://x.com/terrajobst/status/1782922704997498982?s=12

    深入探索

    List Add 在 net9.0 Preview 3 中比在 net8.0 中慢得多(幾乎是 3 倍) · Issue #101437 · dotnet/runtime

    https://github.com/dotnet/runtime/issues/101437

    關於 .NET 9 List 由於 JIT 更改而可能變慢的問題。目前,這種情況僅發生在 Apple Silicon (Arm64) 上。

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

    版權聲明

  • 國內板塊由 InCerry 進行整理 : https://github.com/InCerryGit/WeekRef.NET

  • 其余內容來自 Myuki WeekRef,由 InCerry 轉譯(已獲得授權) : https://github.com/mayuki/WeekRef.NET

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