國內文章
一個開源輕量級的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 單一項目
Uno平臺5.2已發佈。
此版本包括對 Skia 渲染器的增強,以實現更好的性能、多窗口支持、對 Uno SDK 的改進、對 .NET 9 預覽版的支持等。
此外,項目模板已更新,因此單個項目現在可以支持所有平臺。
版本 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進行分組等。
如何在 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 工具博客
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_”開頭的方法,但是關於“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,歡迎大家加入。