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

國內文章

C#/.NET/.NET Core優秀項目和框架2023年10月簡報

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

本文主要介紹了公衆號“追逐時光者”定期推廣和分享的C#/.NET/.NET Core優秀項目和框架。其中包括SKIT.FlurlHttpClient.ByteDance和SwashbucklerDiary兩個項目。SKIT.FlurlHttpClient.ByteDance是全網唯一的C#版字節跳動SDK,封裝了全部已知的字節跳動API,可跨平臺,持續隨官方更新。SwashbucklerDiary是一個.NET開源、跨平臺的本地日記APP。公衆號的推文中包含了項目和框架的介紹、功能特點以及部分截圖等內容。

NativeBuffering,一種高性能、零內存分配的序列化解決方案[性能測試篇]

https://www.cnblogs.com/artech/p/17789432.html

本文介紹了NativeBuffering的優化和性能測試。NativeBuffering是一種特別的序列化解決方案,它將數據對象轉換成連續的字節序列,然後通過新的數據類型對這段字節序列進行封裝。這種方法提高了數據讀取的性能,但並不適用於跨平臺。NativeBuffering的編程模式是圍繞“Source Generator”進行的,通過定義部分類和使用BufferedMessageSource屬性,可以爲數據類型生成額外的類型成員。本文還對NativeBuffering和.NET新版本的原生JSON序列化(System.Text.Json)的性能進行了比較。

.NET中的數組在內存中如何佈局?

https://www.cnblogs.com/artech/p/array-memory-layout.html

本文主要討論了.NET中值類型和引用類型的內存佈局,特別是字符串和數組。對於引用類型對象,除了存儲其所有字段成員外,還需要存儲一個Object Header和TypeHandle。對於數組類型,其內存佈局中,前置4個字節以UInt32的形式存儲數組的長度,後面依次存儲每個數組元素的內容。對於值類型的數組,Payload部分直接存儲元素自身的值。文章通過代碼示例詳細解釋瞭如何將一個字節數組對象在內存中的字節序列讀出來。

記一次 .NET 某工廠無人車調度系統 線程爆高分析

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

本文講述了一位朋友程序中線程數爆高的問題。通過使用命令觀察,發現確實存在4600+的線程,問題確實存在。進一步觀察每個線程的活動,發現大量線程卡在RoutingService.Push上。查看Push方法的邏輯,發現問題出在Result上,異步方法無法完成。代碼中的GetSerial()方法使用了SemaphoreSlim,但這看起來非常多餘。既然Result無法得到值,說明異步方法無法完成。爲了找出原因,還需要進一步觀察slim信號量的情況。

實現一個極簡的字節數組對象池

https://www.cnblogs.com/artech/p/byte-array-pool.html

.NET使用ArrayPoolPool<T>MemoryPool<T>Array/Memory<T>提供對象池功能。在一個項目中,作者需要使用大型字節數組的對象池,希望將它們分配到POH上以降低GC的壓力。由於ArrayPoolPool<T>無法提供支持,作者提供了一個簡單的實現。首先,作者定義了Bucket類,用於管理池化的字節數組。然後,作者創建了ByteArrayOwner類,它封裝了字節數組和所在的Bucket。如果數組長度超過閾值,意味着Bucket不存在,借出的字節數組也不需要歸還。ByteArrayOwner實現了IDisposable接口,Dispose方法調用Bucket的Add方法完成了字節數組的歸還。

.NET8 起步

https://www.cnblogs.com/xiaolipro/p/17809633.html

.NET是一個免費的跨平臺開源開發人員平臺,用於生成各種類型的應用,如Web、移動和桌面、機器學習、遊戲開發、IOT等。它提供高效生產力,包括泛型、LINQ和異步編程等高級語言功能,廣泛的類庫和多語言支持,以及一致性Standard標準和應用程序模板。.NET是面向重視生產力、性能、安全性和可靠性的開發人員的終極平臺。它支持跨應用、跨語言、跨平臺開發,使開發人員能夠以更少的成本,更快地構建應用。.NET還擁有強大的生態,位於.NET Foundation基金會下,已有100,000+ OSS貢獻,3,700+ OSS公司參與者,得到Microsoft的官方支持,並受到數以千計的公司和數百萬開發人員的信任。

不可複製的PDF轉成雙層可複製PDF

https://www.cnblogs.com/xiaohemiao/p/17803534.html

本文介紹瞭如何使用開源庫PdfiumViewer、PDFsharp和PaddleSharp創建一個可以編輯和複製掃描或虛擬打印機生成的PDF的工具。首先,使用PdfiumViewer渲染顯示PDF並將其轉換爲圖片。然後,使用PaddleSharp對提取的圖片內容和bbox座標進行OCR識別。最後,將座標轉換爲PDF的座標,並使用PDFsharp重新生成PDF。如果需要保持原有格式,需要將轉換的圖片重新寫入生成的PDF。這樣就實現了雙層PDF的效果。

dotnet 探究 SemanticKernel 的 planner 的原理

https://www.cnblogs.com/lindexi/p/17810633.html

本文介紹了SemanticKernel的工作原理。SemanticKernel的底層通過AI層的輸入和輸出只有文本,而Planner需要執行編排調度多個功能任務以實現功能。工程師提供各種功能能力,AI根據用戶輸入的需求描述,配合工程師提供的各種功能能力完成用戶的需求。例如,實現使用某個語言的作詩需求,用戶描述需求,工程師提供作詩和翻譯的函數或插件,AI層進行編排調度,先調用作詩函數進行作詩,然後將作詩結果作爲翻譯函數的翻譯進行翻譯,最後將翻譯結果返回給用戶。在SemanticKernel的輔助下,這個需求將非常簡單實現。

Dapper.Lite 擴展

https://www.cnblogs.com/s0611163/p/17807007.html

本文介紹了Dapper.Lite和LiteSql,兩款經過重構和精簡的ORM。Dapper.Lite是Dapper的擴展,支持Lambda表達式的單表查詢和SQL拼接查詢條件,適用於多種數據庫。LiteSql則是不依賴Dapper的版本。這兩款ORM的目標是簡單易用,穩定可靠。如果你不想用EF或SqlSugar,喜歡寫SQL,打算用Dapper,可以試試Dapper.Lite。

Net 高級調試之三:類型元數據介紹(同步塊表、類型句柄、方法描述符等)

https://www.cnblogs.com/PatrickLiu/p/17788818.html

這篇文章是《Net 高級調試》的第三篇,詳細討論了Net類型在內存中的具體樣子。文章首先介紹了測試環境,包括操作系統、調試工具、開發工具和Net版本等。然後,文章詳細解釋了棧和堆的概念,以及Net程序中的基本編程單元類型,包括值類型和引用類型。值類型包括枚舉、結構和其他簡單類型,一般存放在線程棧上。引用類型包括接口、數組、類和自定義的Class,一般存在託管堆中。文章還詳細介紹了值類型佈局、引用類型佈局、同步塊表、類型句柄和方法描述符等概念。

Net 高級調試之五:如何在託管函數上設置斷點

https://www.cnblogs.com/PatrickLiu/p/17804823.html

本文是《Net 高級調試》的第五篇,主要講解如何在託管方法和非託管方法設置斷點。文章首先介紹了調試環境,包括操作系統、調試工具、開發工具、Net版本和CoreCLR源碼。然後,詳細解釋瞭如何在非託管函數和託管函數下斷點。對於非託管函數,可以直接在機器代碼上設置斷點。對於託管函數,由於可能還未生成機器碼,需要採用三種方式:在編譯後的函數上下斷點、在未編譯的函數上下斷點和對泛型方法下斷點。最後,文章通過具體的調試操作過程,實際演示瞭如何設置斷點。

兩種基於時間窗口的限流器的簡單實現

https://www.cnblogs.com/artech/p/window-based-rate-limiter.html

本文講述了作者爲OpenTelemetry的Tracing組件開發的基於速率限制的跟蹤採樣策略。作者認爲現有的RateLimiter解決方案過於複雜,因此嘗試實現了一種簡單且無鎖的解決方案。作者定義了一個IRateLimiter接口,並提供了基於“滑動時間窗口”的實現類型SliddingWindowRateLimiter。這種實現方式利用了BoundedChannel對象,將指定的閾值作爲它的最大容量,從而實現了速率限制。

EFCore 使用FluntApi配置 全局查詢篩選器

https://www.cnblogs.com/cyfj/p/17810311.html

本文介紹瞭如何在使用efCore時通過配置查詢篩選器實現全局軟刪除。在類中通常有一個IsDel屬性表示軟刪除,每次查詢都要指定IsDel爲false,這很麻煩。在efCore中,可以在DbContext類中重寫OnModelCreating方法,爲SysUser類配置查詢篩選器。但如果項目中有很多實體類,可以新建EntityBase文件夾,實現IEntityTypeConfiguration接口,對實體類進行配置。然後在OnModelCreating方法中,通過modelBuilder.ApplyConfigurationsFromAssembly方法自動應用所有實體配置類。如果不在同一個程序集,可以加載指定程序集。這樣就可以實現全局查詢篩選了。

Web SSH 的原理與在 ASP.NET Core SignalR 中的實現

https://www.cnblogs.com/aobaxu/p/17799346.html

本文介紹瞭如何在前端管理終端實現SSH到主控機的終端。使用僞終端模擬輸入輸出設備執行相應進程,如vim等程序可以在終端中運行。設計包括建立連接、監聽終端輸出和前端輸入,以及處理超時和關閉。依賴庫包括portable_pty用於建立終端,xterm.js用於前端展示終端界面,SignalR用於.NET系列Web實時通信。最後,提供了Rust代碼示例,用於建立僞終端並和.NET服務通信。

使用 Docker Compose 部署 RabbitMQ 的一些經驗與踩坑記錄

https://www.cnblogs.com/morang/p/devops-rabbitmq-install.html

本文主要介紹了開源消息隊列系統RabbitMQ的部署安裝和使用經驗。RabbitMQ具有成熟穩定、消息持久化、靈活的消息路由、高性能、高可用性、高擴展性等特點,還支持插件系統和.NET/Java的SDK。在項目中,RabbitMQ被用於日誌記錄、消息發送、數據同步等,表現穩定可靠。本文還詳細介紹瞭如何使用Docker Compose V2安裝RabbitMQ v3.12.6,包括準備工作、使用Docker Compose安裝、配置說明和配置文件等內容。最後,展示了部署成功的界面,並介紹瞭如何安裝延遲消息插件。

利用一段字節序列構建一個數組對象

https://www.cnblogs.com/artech/p/manually-build-array.html

本文詳細介紹了.NET下數組對象的內存佈局,並展示瞭如何根據這個佈局規則創建一段字節序列來表示一個數組對象。文章首先回顧了數組對象的內存佈局,然後通過BuildArray方法構建一個指定長度的數組,數組元素類型由泛型參數決定。根據內存佈局規則計算出目標數組佔據的字節數,並據此創建一個對應的字節數組來表示構建的數組。最後,將數組類型的TypeHandle的值寫入對應的位置,緊隨其後的4個字節寫入數組的長度,從而構建出一個指定元素類型/長度的空數組。

ASP.NET Core+Vue3 實現SignalR通訊

https://www.cnblogs.com/cyfj/p/17808647.html

本文介紹瞭如何在ASP.NET Core 3.0及更高版本中使用SignalR的Hub。Hub已集成到ASP.NET Core框架中,無需單獨引用Microsoft.AspNetCore.SignalR包。創建一個類繼承Hub,實現CreateConnection和SendMessageToUser方法,分別用於創建連接和向特定用戶發送消息。在程序中註冊Hub,然後在前端Vue項目中安裝@microsoft/signalr包,創建myHub.js文件,建立SignalR連接。最後,模擬了數據庫登錄的API部分。

.NET8 WebApplication剖析

https://www.cnblogs.com/xiaolipro/p/17810161.html

"WebApplication"是用於配置HTTP管道和路由的web應用程序。它實現了"IHost"接口,代表程序的抽象,具備啓動、停止生命週期,並通過"IServiceProvider"獲取服務。"WebApplication"還實現了"IApplicationBuilder"接口,具有管道機制,這是.NET中的一個洋蔥模型。在"Build"方法中,會執行四個鉤子,完成服務的配置和註冊。此外,"IStartupValidator"、"IHostedService"、"IHostedLifecycleService"等提供了不同的鉤子,可以加入自定義的業務邏輯。

Apollo 配置中心的部署與使用經驗

https://www.cnblogs.com/morang/p/devops-apollo-install.html

本文主要介紹了攜程開源的分佈式配置管理中心Apollo的部署安裝和使用經驗。Apollo特點包括成熟穩定,支持管理多環境/多集羣/多命名空間的配置,配置修改發佈實時通知到應用程序,支持權限控制、配置繼承,版本管理,灰度發佈,使用監控等。Apollo在微服務項目中作爲配置中心,表現穩定,體驗良好。Apollo的部署包括準備階段和使用Docker Compose安裝階段。準備階段需要準備apollo-db,apollo-configservice,apollo-adminservice,apollo-portal,Deureka等組件。使用Docker Compose安裝階段需要準備好compose.yml和./initsql/初始化腳本,修改其中的IP,拷貝到服務器,然後運行。

C#winform軟件實現一次編譯,跨平臺windows和linux兼容運行,兼容Visual Studio原生界面Form表單開發

https://www.cnblogs.com/easywebfactory/p/17790016.html

本文討論瞭如何讓C#桌面軟件在Linux系統上運行的問題。由於微軟的.net core開發工具並未支持Linux系統下的winform界面軟件,作者提出了一個解決方案,即自定義封裝軟件的System.Windows.Forms組件,將支持Windows和Linux的界面框架GTK封裝進System.Windows.Forms中。這個方案兼容原生C#表單控件,不需要重新開發,只需換成該組件重新編譯即可。同時,它還支持Visual Studio可視化開發,只需引用DLL即可。作者還開發了組件GTKSystem.Windows.Forms,它的控件類庫命名空間和類名稱沿用了原生System.Windows.Forms的類庫名稱,可以在原生開發的C#軟件工程裏,直接引用GTKSystem.Windows.Forms就能兼容運行。

淺析 C# Console 控制檯爲什麼也會卡死

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

本文主要探討了控制檯卡死的原因和底層原理。作者指出,控制檯卡死通常是由於觸動了"快速編輯窗口"。儘管這個問題的原因已知,但底層原理卻鮮有人知。控制檯能響應窗口事件,是因爲它開啓了一個配套的conhost窗口子進程,用來承接UI事件。此外,文章還探討了進程間如何通信,詳細解釋了客戶端通過Console.WriteLine寫入的內容如何被Server端的conhost!ConsoleIoThread方法接收到的過程。

Net 高級調試之二:CLR和Windows加載器及應用程序域介紹

https://www.cnblogs.com/PatrickLiu/p/17784634.html

本文是關於.Net高級調試的學習記錄,主要介紹了調試工具和.Net框架的相關概念。文章中提到的調試工具是Windbg,開發工具是Visual Studio 2022,測試環境是Net Framework 4.8。文章還解釋了.Net框架的基本構成,包括虛擬執行引擎(CLR)和相關的框架類庫。此外,文章還詳細介紹了.Net程序的編譯過程,包括編譯器編譯和JIT編譯兩個階段。編譯器編譯階段將C#源碼編譯成IL代碼,JIT編譯階段則將IL代碼編譯成可以直接運行的機器代碼。

.net core中你的MD5用對了嗎?

https://www.cnblogs.com/broadm/p/17789951.html

本文介紹了在.net環境中獲取字符串MD5的幾種方法,包括StringBuilder版本、BitConverter版本和StringConcat版本,並進行了性能對比。結果顯示,StringBuilder和BitConverter的性能相對較好,而StringConcat的性能最差。然而,從.net 5.0開始,提供了兩個更高效的方法:Convert.ToHexString和MD5.HashData。特別是MD5.HashData靜態版本,其性能相對於StringBuilder,單線程性能提高了3倍,多線程性能提高了5倍。

一個簡單高效低內存的.NET操作Excel開源框架 - MiniExcel

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

本文介紹了.NET操作Excel的開源框架MiniExcel,它能有效避免大數據量操作時的內存溢出問題。MiniExcel以流的角度寫底層算法邏輯,將原本佔用的1000多MB內存降低到幾MB,避免內存不足的情況。它的特點包括低內存耗用,支持即時操作每行數據,兼具LINQ延遲查詢特性,輕量,不需要安裝Microsoft Office、COM+,DLL小於150KB,以及簡便操作的API風格。性能對比顯示,MiniExcel在導入、查詢、導出、創建Excel方面都表現出色。

ExcelPatternTool 開箱即用的Excel工具包現已發佈!

https://www.cnblogs.com/jevonsflash/p/17787878.html

本文介紹了基於NPOI開發的ExcelPatternTool,這是一個用於處理Excel的工具包,特別強調單元格樣式的控制,提升了初始數據導入和報表導出等功能的易用性。ExcelPatternTool具有數據校驗、數據導入和自定義樣式填充數據導出等功能,還提供了獨立的Excel校驗工具,CLI版本和帶UI(WPF)版本的程序,以及ODBC擴展。用戶可以通過引用ExcelPatternTool.Core在項目中使用,支持從Excel導入數據和導出數據到Excel。

Net 高級調試之一:開始認識一些調試工具

https://www.cnblogs.com/PatrickLiu/p/17781974.html

本文是關於.Net高級調試的學習記錄,作者通過學習.Net高級調試,對以前模糊的地方有了更深入的理解。雖然學習過程中遇到了困難,但作者堅持下來,收穫頗豐。作者感謝一線碼農的視頻教程,對其學習有很大幫助。文章中還介紹了調試環境,包括操作系統Windows Professional 10,調試工具Windbg Preview,開發工具Visual Studio 2022,Net版本Net Framework 4.8,以及CoreCLR源碼。作者強調,好的調試工具對於程序調試至關重要,接下來將介紹一些調試工具。此外,文章還提供了一些測試代碼,以便讀者更好地理解Windbg的使用過程和方法。

C#版字節跳動SDK - SKIT.FlurlHttpClient.ByteDance

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

本文介紹了一款C#開源的字節跳動SDK:SKIT.FlurlHttpClient.ByteDance,它封裝了全部已知的字節跳動API,包括字節小程序開放平臺、抖音開放平臺等模塊,支持跨平臺使用。該項目基於Flurl.Http,支持.NET Framework 4.6.1+、.NET Standard 2.0+、.NET Core 2.0+、.NET 5+,並且支持Windows / Linux / macOS多平臺部署。此外,它還提供了全異步式編程,強類型接口模型,以及完整、完善、完全的字節跳動HTTP API封裝。

簡單實現.NET Hook與事件模擬

https://www.cnblogs.com/podolski/p/17791537.html

作者分享了他在玩《星露穀物語》時,爲了提高效率,自己編寫了一個自動點擊的程序。他使用了.NET的SharpHook組件,設置了全局快捷鍵來控制自動點擊的開關。在程序中,他設置了每隔兩秒鐘模擬鼠標左鍵點擊一次。這樣,只要遊戲在前臺運行,按下設定的快捷鍵,鼠標懸停在物品上就能自動拿起或放下,再按另一個快捷鍵就能停止自動點擊。他提醒,很多遊戲會單獨監聽鼠標的按下與鬆開,所以在模擬點擊時需要設置適當的延時。

Util應用框架快速入門(4) - 集成測試開發入門

https://www.cnblogs.com/xiadao521/p/17789607.html

本文主要講述瞭如何在Util應用框架開發的項目中編寫集成測試。自動化測試對於Util應用框架的開發非常重要,能保證基礎功能的穩定性。測試分爲單元測試和集成測試,單元測試隔絕外部依賴,僅測試自身的某些功能,集成測試則直接訪問外部依賴,對關聯的所有類型進行測試。自動化測試可以幫助開發者攔截代碼邏輯出現變化的錯誤,但也存在維護成本高的問題。測試框架選型包括XUnit.Net,XUnit.DependencyInjection,Moq,Bogus和AutoBogus等。最後,文章介紹了在Util項目中如何開發集成測試,包括運行示例項目和數據訪問層集成測試等內容。

Facade 外觀模式簡介與 C# 示例【結構型5】【設計模式來了_10】

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

本文介紹了外觀模式,這是一種設計模式,通過提供一個統一的接口,使客戶端可以訪問子系統中的一組接口,而無需關心子系統中接口的具體實現。外觀模式的優點包括提供統一接口,隱藏子系統複雜性,提高代碼可擴展性。缺點包括可能增加系統複雜性,違反開閉原則,增加系統耦合度,降低系統靈活性。適用場景包括子系統複雜,系統結構層次複雜,需要隱藏子系統細節,需要降低耦合度等。最後,文章通過一個家庭影院的示例代碼,展示瞭如何實現外觀模式。

淺析 C# 控制檯的 Ctrl+C 是怎麼玩的

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

本文主要講述了Windows控制檯程序中Ctrl+C事件的底層實現。首先,通過C#代碼示例,展示瞭如何訂閱Console.CancelKeyPress事件,以便在用戶按下Ctrl+C時執行特定邏輯。然後,通過反編譯和調試,揭示了Console.CancelKeyPress事件是如何通過Win32 API的Kernel32.SetConsoleCtrlHandler方法註冊的。這表明C#的Ctrl+C事件實際上是基於Win32 API封裝的。

使用aop(肉夾饃)爲BlazorServer實現統一異常處理

https://www.cnblogs.com/jionsoft/p/17783675.html

本文主要討論了在web開發中如何處理異常。通常,用戶的一個操作對應一個http請求,一個controller的action會執行這個處理。在asp.net core中,常見的方式是定義一個“異常處理中間件”,在catch中捕獲異常,記錄日誌,並返回一個統一的異常json結構。在blazor server中,服務端和瀏覽器建立了長連接websocket,後續的瀏覽器和服務端的交互沒有類似http這種請求響應了,那在哪裏做全局異常攔截呢?blazor中提供了ErrorBoundary組件,當ChildContent中的組件發生了異常,則ChildContent隱藏ErrorContent會被顯示出來。BootstrapBlazor是一套bootstrap風格的blazor ui組件庫,它提供了全局異常處理方式,它的方式是在根組件上截獲異常,這樣應用中的任何組件發生異常時它都能處理。

Util應用框架快速入門(5) - 權限入門

https://www.cnblogs.com/xiadao521/p/17794174.html

本文介紹了Util平臺,這是一個基於.NET的應用框架,提供了基於資源和角色的權限模塊,可以控制前端菜單和按鈕,同時也能控制API的訪問。Util平臺分爲三個項目,分別滿足單體架構和微服務架構的需求。其中,Util.Platform.Single是單體架構版本,Util.Platform.Dapr是微服務架構版本,Util.Platform.Share是共享庫,抽取了單體架構和微服務架構的共享代碼。此外,Util平臺還提供了系統功能和權限管理模塊,包括應用程序管理、聲明管理、資源管理、用戶管理、角色管理和權限管理等功能。

升訊威在線客服系統的併發高性能數據處理技術:爲多線程處理同步數據

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

本文介紹了作者開發的升訊威在線客服系統,這是一個免費開源的項目,已經獲得了許多用戶的認可。最近,該系統成功通過了客戶組織的壓力測試,表現穩定,無異常和掉線,消息實時到達,無任何延遲。作者還計劃通過一系列的文章詳細分析升訊威在線客服系統的併發高性能技術是如何實現的,包括使用了哪些方案以及具體的做法。本文主要介紹瞭如何爲多線程處理同步數據,包括同步代碼區域、手動同步、同步上下文等多種策略。

主題

代表 5 倍生產力。宣佈 Uno Platform 5.0

https://platform.uno/blog/uno-platform-5-0/

Uno平臺5.0已發佈。

此版本包括 C# 標記(XAML 的 Fluent 風格 UI 描述替代方案)、Figma 到 C# 標記插件、改進的熱重載、MVUX(模型-視圖-更新擴展)的改進、刪除對 Xamarin 和 .NET 6 的支持,等等。包含各種改進和更改。

版本 2.7.4 · StackExchange/StackExchange.Redis

https://github.com/StackExchange/StackExchange.Redis/releases/tag/2.7.4

StackExchange.Redis 2.7.4 已發佈。

此版本增加了對 RESP3 協議的支持。對於RESP3,結果的格式存在一些差異,因此您需要在代碼或連接字符串中顯式指定它才能使用它,如果您直接處理命令,則這是必要的。

版本 8.1.0 · App-vNext/Polly

https://github.com/App-vNext/Polly/releases/tag/8.1.0

Polly 8.1.0 已發佈。

此版本包括改進,例如改進與 AOT 的兼容性以及從 DI 配置 ResilienceContextPool。

BenchmarkDotNet v0.13.10 · dotnet/BenchmarkDotNet · 討論 #2457

https://github.com/dotnet/BenchmarkDotNet/discussions/2457

BenchmarkDotNet v0.13.10 已發佈。

此版本增加了對 .NET 9 的支持。

.NET MAUI 中的 .NET 8 性能改進 - .NET 博客

https://devblogs.microsoft.com/dotnet/dotnet-8-performance-improvements-in-dotnet-maui/

關於 .NET 8 中的 .NET MAUI 性能改進。

  • 新功能
  • 構建、內循環性能
  • 改進的性能和應用程序大小
  • 內存泄漏
  • 工具和文檔

在 WinAppSDK 1.4.2 中發佈 WinUI 3 · microsoft/microsoft-ui-xaml · GitHub

https://github.com/microsoft/microsoft-ui-xaml/releases/tag/winui3/release/1.4.2

Windows App SDK 1.4.2 已發佈。

該版本主要修復崩潰等bug。 源代碼也可用

發佈診斷版本 - v8.0.452401 · dotnet/diagnostics

https://github.com/dotnet/diagnostics/releases/tag/v8.0.452401

.NET 診斷工具 8.0.452401 發佈。

此版本包括 dotnet-monitor 和計數器集成,以及對 dotnet-dump/SOS 的一些改進。

.NET Framework 2023 年 10 月累積更新預覽 - .NET 博客

https://devblogs.microsoft.com/dotnet/net-framework-october-2023-cumulative-update-preview/

.NET Framework 2023 年 10 月累積更新的預覽版。

此版本修復瞭解析 XAML/XPS 時出現的問題。

文章、幻燈片等

Microsoft Ignite 2023 即將到來!(11 月 14 日至 17 日)- Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/microsoft-ignite-2023-is-around-the-corner-nov-14-17/

介紹 Microsoft Ignite 2023(11 月 14 日至 17 日)以及該活動中的 Visual Studio 會議。

Win32 API 早期訪問中的寫入時複製 - Engineering@Microsoft

https://devblogs.microsoft.com/engineering-at-microsoft/copy-on-write-in-win32-api-early-access/

關於 CopyFile API 現在支持 Windows 11 Insider Canary 頻道上的 ReFS (DevDrive) 寫入時複製。

這消除了構建引擎和工具來支持 CoW 的需要。

新的 F# 編譯器功能:基於圖形的類型檢查 - .NET 博客

https://devblogs.microsoft.com/dotnet/a-new-fsharp-compiler-feature-graphbased-typechecking/

關於 F# 編譯器中新的基於圖形的類型檢查機制。

使用 Testcontainers 嘗試 MongoDB 與 EF Core - .NET 博客

https://devblogs.microsoft.com/dotnet/efcore-mongodb/

瞭解如何使用 Testcontainers 來試驗 Entity Framework Core 支持的 MongoDB 操作。

集成 OmniSharp-Vim 和 fzf - Qiita

https://qiita.com/lx-sasabo/items/b2226eb3594a2acaeafb

關於如何通過鏈接 OmniSharp-Vim 和 fzf 來實現 Find Usations,以便在 Vim 中編寫 C#。

使用 Entity Framework Core 保存和恢復對象,而不依賴於特定的具體類型

https://zenn.dev/oyasumi731/articles/4a9e30385d0736

如何在 Entity Framework Core 中使用抽象類型和繼承(每層次結構 (TPH) 模式)進行映射。

[C#] 使用 AES 的加密和解密步驟

https://zenn.dev/nekojoker/articles/670824eeaa1ba8

使用 AES 加密和解密數據的實用指南。

避免使用 TimeProvider 和 ITimer 進行不穩定測試:探索 .NET 8 預覽版 - 第 12 部分

https://andrewlock.net/exploring-the-dotnet-8-preview-avoiding-flaky-tests-with-timeprovider-and-itimer/

如何使用“TimeProvider”和“ITimer”(.NET 8 中引入的時間和計時器抽象),以及如何使用它們來確保穩定的單元測試。

使用 Kiota 生成 .NET API 客戶端的開發人員指南

https://medium.com/@ismailozcelik/developers-guide-to-generate-net-api-client-with-kiota-29ef9ec3ba87

瞭解如何使用 Kiota 爲 OpenAPI 中定義的 REST API 生成客戶端。

組織 ASP.NET Core 最小 API

https://www.tessferrandez.com/blog/2023/10/31/organizing-minimal-apis.html

介紹使用 ASP.NET Core Minimal API 定義和實現 API 時組織代碼的技術。使用擴展方法進行聚合、使用MapGroup進行分組等。

.NET 8 讓您每天都更快。

https://medium.com/medialesson/net-8-makes-you-faster-everyday-233f9740379d

.NET 8 及更早版本中一些基本類的性能比較。

將 Unity 移植到 CoreCLR | Unity 博客

https://blog.unity.com/engine-platform/porting-unity-to-coreclr

有關將 Unity 移植到 CoreCLR 的說明。本文解釋瞭如何在 CoreCLR 上運行帶有 GC 的 Unity。

使用 ASP.NET Core Minimal API 的全局端點過濾器

https://khalidabuhakmeh.com/global-endpoint-filters-with-aspnet-core-minimal-apis

引入一種技術,允許您使用“.MapGroup(string.Empty)”創建一個空組,並通過爲其指定端點過濾器將其定義爲全局過濾器。

關於 .NET 8 中默認啓用的動態 PGO - Neno's Garden。

https://blog.neno.dev/entry/2023/10/29/131336

關於 .NET 8 中默認啓用的動態 PGO,解釋了 PGO 的機制及其優化行爲。

F# 8 中的新增功能

https://amplify-fsharp.github.io/files/sessions/amplify-fsharp-october-2023.pdf

F# 8 中的更改摘要幻燈片。

如何將 Testcontainers 與 .NET 單元測試結合使用 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2023/10/24/how-to-use-testcontainers-with-dotnet-unit-tests/

瞭解如何使用 Testcontainers 在容器中使用臨時數據庫編寫單元測試。

本文還介紹瞭如何爲每個集合或類使用容器,以及如何測試 ASP.NET Core 應用程序。

.NET 8 中的短路路由:探索 .NET 8 預覽版 - 第 11 部分

https://andrewlock.net/exploring-the-dotnet-8-preview-short-circuit-routing/

對 .NET 8 中 ASP.NET Core 中引入的短路路由的說明。

短路路由是一種允許您在處理端點時跳過中間件的機制。

集合表達式

https://ufcpp.net/study/csharp/datatype/collection-expression/

C# 12 中引入的集合表達式的說明。

使用 TLS=true 從 .NET6 連接到 Amazon DocumentDB - Qiita

https://qiita.com/ishiyama0530/items/0c5dd19ab4df548c2c5f

我從啓用了 TLS 的 .NET 6 容器連接到 Amazon DocumentDB 時遇到證書問題。

.NET 8 中 Blazor 的新增功能“AddCascadingValue 方法”

https://zenn.dev/microsoft/articles/dotnet8-blazor-01

關於在 .NET 8 中添加到 Blazor 的 AddCascadingValue。提供了一種通過將級聯值註冊到服務而不是從組件來提供級聯值的方法。

Rider 2023.3 EAP 4:改進了運行多個項目、類型依賴關係圖等的體驗 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2023/10/23/rider-2023-3-eap-4/

Rider 2023.3 EAP 4 已發佈。

此版本包括對運行多個項目、保存解決方案過濾器、類型依賴關係圖、中央包管理中的代碼完成以及性能分析的改進。

neue cc - 當您的主要語言是另一種語言時如何使用 Rust - csbindgen 的 C# x Rust FFI 實際示例

https://neue.cc/2023/10/23_rusttokyo.html

根據我使用 Rust 的 C# 綁定庫 csbindgen 的經驗,關於如何使用 Rust 的會議和後續活動。

在 C# 中使用 FluentScheduler

https://dev.to/karenpayneoregon/using-fluentscheduler-with-c-29ck

庫、存儲庫、工具等。

jsakamoto/Toolbelt.Blazor.ViewTransition:一個路由器組件和一項服務,使您的 Blazor 應用程序通過視圖轉換 API 在頁面之間具有漂亮的動畫轉換效果。

https://github.com/jsakamoto/Toolbelt.Blazor.ViewTransition

在 Blazor 上提供頁面到頁面轉換的路由器組件。

https://x.com/jsakamoto/status/1718257011740312011?s=12

網站、文檔等

.NET 會議日曆

https://dotnetconf-calendar.azurewebsites.net/

以 iCalender 格式提供 .NET Conf 2023 日程表的網站。

推文

https://x.com/kstrubeg/status/1716101506200433073?s=12

image-20231109105940540


https://x.com/dotnetonaws/status/1714672688369701286?s=12

image-20231109105914875


描述瞭如果不注意C#的異常處理機制的話,編寫的代碼可能會導致在管理員權限下運行低信任的代碼。

https://x.com/ericlippert/status/1717203249898619248?s=12

image-20231109105826077

版權聲明

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

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