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

2023-11-10 12:00:51

國內文章

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


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


描述瞭如果不注意C#的例外處理機制的話,編寫的程式碼可能會導致在管理員許可權下執行低信任的程式碼。

https://x.com/ericlippert/status/1717203249898619248?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,歡迎大家加入。

抽獎送書活動預熱!!!

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