.NET週報【12月第2期 2022-12-15】

2022-12-19 12:00:08

國內文章

九哥聊Kestrel網路程式設計第一章:開發一個Redis伺服器

https://mp.weixin.qq.com/s/HJYnBE-7wbvkAYHxQaq3eQ

我和擁有多個.NET 千星開源專案作者九哥一拍即合,為了讓更多的人瞭解 Kestrel,計劃寫一系列的文章來介紹它;本文是九哥釋出的第一篇,通過 Kestrel 實現一個 Redis 的偽伺服器,帶大家瞭解 Kestrel 除了承載 HTTP 協定,還有其它更多的可能性,DotNetty 能做到的,Kestrel 同樣也可以。

用最少的程式碼打造一個Mini版的gRPC框架

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

在《用最少的程式碼模擬gRPC四種訊息交換模式》中,我使用很簡單的程式碼模擬了gRPC四種訊息交換模式(Unary、Client Streaming、Server Streaming和Duplex Streaming),現在我們更近一步,試著使用極簡的方式打造一個gRPC框架(github地址)。這個gRPC是對ASP.NET Core gRPC實現原理的模擬,並不是想重新造一個輪子。

玩好.NET高階偵錯,你也要會寫點組合

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

.NET 高階偵錯要想玩的好,看懂組合是基本功,但看懂組合和能寫點組合又完全是兩回事,所以有時候看的多,總手癢癢想寫一點,在 Windows 平臺上搭建組合環境不是那麼容易,大多還是用微軟的 MASM + DosBox 搭一個 8086 的環境,這玩意距今快 50 年了,今天為大家介紹介紹。

為什麼推薦Kestrel作為網路開發框架

https://www.cnblogs.com/kewei/p/16955086.html

網路框架千千萬萬,在dotnet平臺,我們可以直接手擼Socket,也可以基於dotnetty來開發,或者選擇某些第三方類似於dotnetty的網路庫,為何我要推薦Kestrel呢?

天坑,這樣一個lambda隨機取資料也有Bug

https://www.cnblogs.com/rupeng/p/16961982.html

前幾天,一位網友跟我說他編寫的一段很簡單的程式碼遇到了奇怪的Bug,他要達到的效果是從一個List中隨機取出來一條資料,程式碼很簡單但是有BUG,帶大家一起了解下。

.NET效能優化-ArrayPool同時複用陣列和物件

https://www.cnblogs.com/InCerry/p/use-arraypool-with-naver-clear-array.html

大佬您好,之前讀了您的文章受益匪淺,我們有一個專案經常佔用 7-8GB 的記憶體,使用了您推薦的ArrayPool以後降低到 4GB 左右,我還想著能不能繼續優化,於是 dump 看了一下,發現是ArrayPool對應的一個陣列有幾萬個物件,這個類有 100 多個屬性。我想問有沒有方法能複用這些物件?感謝!

推薦一個使用 .NET 6 開發的開源媒體系統

https://mp.weixin.qq.com/s/_3LWLTa2Oyn0jwdIuJ1zsw

Jellyfin 是一個使用.NET6編寫的免費的媒體系統,它可以讓您更好的管理媒體,包括電影,音樂,圖書,照片等,它是 Emby 和 Plex 的替代方案,在 Github 開源並擁有18.6k 的 Star。

dotnet-exec 讓 C# 程式更簡單

https://mp.weixin.qq.com/s/Agk3i-YLqNQfcjG4Vc-cIQ

dotnet-exec是一個可以執行 C# 程式而不需要專案檔案的命令列工具,並且你可以指定自定義的入口方法不僅僅是Main方法。

C# 11 中的新增功能

https://mp.weixin.qq.com/s/Ga-jBE8iih7KtQVjefwlnw

我們很高興地宣佈 C# 11 已經發布!與往常一樣,C# 開闢了一些全新的領域,同時推進了過去版本中一直在執行的幾個主題。我們的檔案頁面上的 C# 11 的新增功能下有許多功能和詳細資訊,這些內容都得到了很好的介紹。

開發高效能ASP.NET應用

https://mp.weixin.qq.com/s/E-7y8hV006dhx7TBMrM5Gg

本文是「.NET Conf China 2022」上我的一個分享,這裡更細化的分享出來。分享分為四個部分:1. 制定目標、2.設計應用、3. 正確測試、4.效能優化。

影象處理技術OpencvSharp入門

https://mp.weixin.qq.com/s/TqltBB4E-Z6w48z1K-Y6tw

在.NET下常用OpenCV進行影象處理工作,常用的.NET下的OpenCV庫有Emgu CV和OpenCVSharp。今天我們就來和大家介紹一些OpenCvSharp。

工程座標轉換方法 C# 程式碼實現

https://mp.weixin.qq.com/s/J58yfxbtT7gspZSCEEMK_w

這裡針對GPS接收的WGS84橢球的經緯度轉換為地方座標系的問題,利用C#,對工程座標轉換方法和步驟做出詳細的解答。不基於任何類庫和函數庫,也未使用矩陣庫,可以便利的將程式碼移植到任何語言。

主題

.NET 7 中的網路庫改進 - .NET Blog

https://devblogs.microsoft.com/dotnet/dotnet-7-networking-improvements/

介紹.NET 7中與網路有關的改進的文章。該文章詳細介紹了以下專案:

  • 改進對連線執行失敗的處理
  • 為HttpHeaders讀取執行緒安全
  • HTTP/2和HTTP/3協定錯誤檢測
  • HTTP/3
  • QUIC
    • .NET中的的QUIC。
    • API(QuicListener, QuicConnection, QuicStream)。
  • 安全問題
    • 協商API(Windows認證)
    • 證書驗證選項
    • 效能
  • WebSocket
    • WebSockets握手響應的細節
    • 外部HTTP使用者端供應
    • HTTP/2上的WebSockets

試用Visual Studio 2022版17.5預覽版2 - Visual Studio部落格

https://devblogs.microsoft.com/visualstudio/try-out-visual-studio-2022-17-5-preview-2/

Visual Studio 2022版17.5預覽版已經發布。

  • 一體化搜尋的改進
  • 編輯時的粘性捲動
  • 在偵錯程式文字視覺化器中對URL編碼的字串、Base64、JWT和其他字串進行解碼
  • 快速補充
  • 改進的重新認證工作流程
  • 將ASP.NET Core應用程式釋出到Azure容器應用程式中
  • ASP.NET核心專案應用程式輸出到整合終端
  • 各種C++改進
  • 使用.config檔案客製化安裝佈局
  • 能夠在退出時更新

.NET 2022年12月更新 - .NET 7.0.1, .NET 6.0.12, .NET Core 3.1.32 - .NET部落格

https://devblogs.microsoft.com/dotnet/december-2022-updates/

.NET 7.0.1、.NET 6.0.12和.NET Core 3.1.32已被髮布。

該版本包含一個安全修補程式,它修復了一個遠端程式碼執行漏洞,該漏洞允許通過開啟精心製作的XPS檔案來執行程式碼。

這也是.NET Core 3.1的最後一個版本,它將在2022年12月13日不被支援。

.NET框架2022年12月安全和質量捲動更新 - .NET部落格

https://devblogs.microsoft.com/dotnet/dotnet-framework-december-2022-security-and-quality-rollup-updates/

2022年12月釋出的.NET框架安全和累積捲動更新。

該版本包含一個安全修補程式,並修復了一個遠端程式碼執行漏洞,該漏洞允許通過開啟精心製作的XPS檔案執行程式碼。

釋出IronPython 3.4.0 - IronLanguages/ironpython3

https://github.com/IronLanguages/ironpython3/releases/tag/v3.4.0

IronPython 3.4.0已經發布。

該版本支援Python 3.4語法和標準庫。 它還支援一些較新版本的語法,等等。

執行時目標是.NET框架4.6.2、.NET Core 3.1和.NET 6。

它也以.NET工具的形式釋出,可以通過dotnet tool install -g IronPython.Console來安裝和執行。

-IronPython 3.4.0終於正式釋出了- 與.NET整合的Python語言的開源實現/從'Python 2'過渡到'Python 3' - Windows森林

多語言筆電 - 2022年12月釋出 - .NET部落格

https://devblogs.microsoft.com/dotnet/polyglot-notebooks-december-2022-release/

2022年12月釋出的Polyglot Notebooks(以前的.NET Interactive)。

  • 升級到.NET 7
  • 支援C# 11和F# 7
  • SQL和KQL的改進與新的動態核心選擇器

2.2.2版 - mysql-net/MySqlConnector

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

Async MySqlConnector 2.2.2已經發布。

該版本修復了TLS連線初始化和連線異常時物件銷燬過程中的記憶體漏失。

Visual Studio Code 2022年11月

https://code.visualstudio.com/updates/v1_74

Visual Studio Code 1.74(1.74.1)已經發布。

  • 改善無障礙設施。
  • 客製化資源管理器的自動顯示。
  • 筆電和差異檢視中的音訊提示
  • 合併編輯器中的復原/重做
  • 不安全的儲存庫管理
  • 通過JavaScriptconsole.profile收集
  • 從返回到定義 (JavaScript/TypeScript)
  • 遠端隧道
  • 在Jupyter筆電中進行 "只是我的程式碼 "的偵錯
  • 開發容器中的GPU支援

此外,在1.74版釋出後,1.74.1版也已釋出,並對各種錯誤進行了修復。

用專案遷移從ASP.NET遷移到ASP.NET Core第五部分 - .NET部落格

https://devblogs.microsoft.com/dotnet/migrating-from-asp-net-to-asp-net-core-part-5/

一系列關於從ASP.NET遷移到ASP.NET Core的文章,其中System.Web.Adapter 1.0現已釋出。

這篇文章介紹了遷移的Visual Studio擴充套件和System.Web.Adapter的更新。

Visual Studio中用於ASP.NET Core專案的開發隧道 - Visual Studio部落格

https://devblogs.microsoft.com/visualstudio/dev-tunnels-in-visual-studio-for-asp-net-core-projects/

一篇關於Dev tunnels(開發隧道)的介紹性文章,這是Visual Studio中ASP.NET Core專案可用的預覽功能。

Dev tunnels是一種埠轉發功能,允許從外部來源(如ngrok)存取本地環境。

文章介紹了最新的更新和如何使用該功能,永續性和臨時性隧道的區別,工具視窗和環境變數支援。

文章、幻燈片等

未使用通用型別引數的TypeLoadException問題 | UFCPP的部落格

https://ufcpp.net/blog/2022/12/unused-generic-type-parameter/

關於執行時行為問題的文章,涉及結構體的泛型和包含它們的結構。

如果struct A<T> {}被定義為struct B { A<B> Value; },我們談論的是防禦性地丟擲一個異常,儘管它不是遞迴。

在實踐中嘗試.NET Lambda的Native AOT | DevelopersIO

https://dev.classmethod.jp/articles/net-lambda-native-aot/

文章中對AWS Lambda支援的.NET應用的Native AOT進行了實際測試。

在文章中,除了使其發揮作用的程式外,還測量並提到了實際的啟動時間。 (本地AOT較慢,等等。)

我用.NET MAUI做了一個跨平臺(計劃中)的備忘錄應用。

https://zenn.dev/tomori_k/articles/966f34daea405a

關於在.NET MAUI中實現一個備忘錄應用程式的文章。

使用NuGet 6.4中的中央軟體包管理改進多個專案間的版本控制 - Shibayan Miscellaneous

https://blog.shibayan.jp/entry/20221211/1670748155

關於在NuGet 6.4中使用中央包管理來集中管理專案的包版本的文章。

文章還提到了轉換器的存在和關於Dependabot的說明。

Blazor WebAssembly - 通過確保刪除沒有從任何地方參照的程式碼來減少.dll大小 - Qiita

https://qiita.com/jsakamoto/items/91c86a0f34de6e6d77b9

關於如何通過在Blazor WebAssembly中進行組合修剪來減少檔案大小的文章。

[Help wanted] 當用Playwright進行E2E測試Blazor伺服器時,Playwright的第一個動作太快了,測試失敗 - Qiita

https://qiita.com/jsakamoto/items/3d749a9ba4f8523b5291

關於用Playwright測試Blazor伺服器時的一個問題,即在事件處理程式連線到預渲染的內容之前,Playwright以讀完的方式執行。

Visual Studio生產力的新內容 - Visual Studio部落格

https://devblogs.microsoft.com/visualstudio/whats-new-in-visual-studio-productivity/

關於Visual Studio生產力的新功能的文章。

  • 輸出視窗的時間戳
  • 選擇匹配
  • 用滑鼠滾輪進行水平捲動
  • 使用聲音提示跟蹤程式碼
  • 突出顯示行號

擴充套件方法沒有看到隱式型別轉換 | UFCPP的部落格

https://ufcpp.net/blog/2022/12/extension-resolution/

一篇解釋擴充套件方法不能用於隱式型別轉換的文章。

NET 7中新的5個MVC功能

https://andrewlock.net/5-new-mvc-features-in-dotnet-7/

文章介紹了.NET 7中ASP.NET Core MVC的5個新特性。

  • Primitive binding IParseable, TryParse.
  • MVC控制器自動猜測[FromServices]為依賴注入
  • 使用nullable註解來猜測它是否是強制性的
  • 支援MVC中的 IResult
  • 客製化的後設資料提供者在響應中提供更好的錯誤名稱

使用Keycloak作為Blazor WebAssembly(WASM)應用程式的身份提供者

https://dev.to/nikiforovall/use-keycloak-as-identity-provider-from-blazor-webassembly-wasm-applications-3an6

關於如何使用Keycloak作為Blazor WebAssembly的IdP的文章。

VS2022新的DevTunnel(開發隧道)功能,便於從Azure存取本地偵錯環境 - Qiita

https://qiita.com/seuharuka/items/6f77983a179042b48e59

一篇介紹和使用Dev tunnels功能的文章,這是Visual Studio 2022的一個預覽功能。

C#11與.NET 6.0和.NET Framework 4.8的相容性 - Qiita

https://qiita.com/skitoy4321/items/77aff330a4ce63dd977c

文章總結了.NET 7中支援的C# 11功能在.NET 6和.NET Framework 4.8中可以使用(但不一定支援)的程度。

在GitHub行動上構建MAUI應用程式

https://zenn.dev/proudust/articles/2022-12-06-build-maui-on-gh-actions

關於GitHub Actions上支援狀態和構建.NET MAUI應用程式步驟的文章。

讓我們用Blazor建立一個表單,允許你動態地新增更多的輸入欄位。

https://zenn.dev/okazuki/articles/dynamic-items-form-in-blazor

一篇關於如何使用Blazor動態地增加和減少表單中的專案數量,以及進行驗證的文章。

使用CommunityToolkit.Maui.MediaElement的背景音訊流(預覽),適用於Android和iOS

https://dev.to/mephisztoe/background-audio-streaming-with-communitytoolkitmauimediaelement-preview-for-android-and-ios-340p

關於如何在Android和iOS上使用CommunityToolkit.Maui.MediaElement(預覽版)進行後臺串流媒體音訊的文章。

[調查] 在用MSBuild構建後立即執行dotnet測試,將重新構建 - Qiita

https://qiita.com/lx-sasabo/items/557ff31eee36429d229e

關於調查在用MSBuild構建後執行dotnet測試可能導致構建再次被執行的情況的文章。

該文章指出,結果因是否使用Microsoft.NET.Build.Extensions而發生變化。

用Quartz.NET排程jOB - Code Maze

https://code-maze.com/schedule-jobs-with-quartz-net/

關於如何用Quartz.NET排程Job並在後臺處理的文章。

介紹Wolverine,用於有效的伺服器端.NET開發

https://jeremydmiller.com/2022/12/12/introducing-wolverine-for-effective-server-side-net-development/

介紹使用Wolverine(一種調解器/訊息匯流排)進行的伺服器開發。

將Blazor WebAssembly(由ASP.NET Core託管)部署到Fly.io,該網站可免費使用(使用EF Core+PostgreSQL) - Qiita

https://qiita.com/nobu17/items/824c39493f7b12e94f7b

一篇關於將Blazor WebAssembly部署到fly.io並在伺服器端用EF Core連線PostgreSQL等的文章。

用Figma製作的.NET MAUI UI元件 - Qiita

https://qiita.com/MAUIHighSchool/items/232e1bb3d65080f2c548

從Figma的設計到建立一個UI元件,都需要使用.NET MAUI程式碼。

在.NET 7中,將ASP.NET Core Identity中的2FA's Token Provider長度減少到4位元而不是6位。

https://dev.to/mohammedahmed/reduce-the-2fas-token-provider-length-in-aspnet-core-identity-to-4-digits-instead-of-6-digits-in-net-7-6fh

關於如何通過在ASP.NET Core Identity中客製化2FA的令牌提供者,嘗試從6位數改為4位元數的文章。

CommunityToolkit.Mvvm V8介紹 - Qiita

https://qiita.com/kk-river/items/d974b02f6c4010433a9e

CommunityToolkit.Mvvm 8.0.0的一篇介紹性文章。

它介紹了屬性、命令程式碼生成、信使等。

在.NET 8中新增ArgumentException和ArgumentOutOfRangeException幫助器

https://steven-giesel.com/blogPost/f4bc6fcc-5691-4f72-b9bb-75aeeb59230a

文章介紹了正在考慮在.NET 8中加入ArgumentExceptionArgumentOutOfRangeException的輔助方法。

是GC的效能倒退還是其他原因?

https://maoni0.medium.com/is-the-regression-in-gc-or-something-else-38f10018dd21

關於GC中的倒退的文章。

它解釋說,有些效能退步看起來像GC效能退步,但其實不是,例如當你升級.NET版本時,你可以通過使用舊的GC來檢查它是否確實存在效能退步。

用ML.NET 2.0在C#中進行文字分類

https://medium.com/accessibleai/text-classification-in-c-with-ml-net-2-0-bc979dfd8ca9

關於如何使用ML.NET 2.0進行文字分類的文章。

.NET MAUI x Stripe C# 跨平臺輕鬆信用卡支付 - Qiita

https://qiita.com/MAUIHighSchool/items/393ba93e2eade7f8c9b9

關於如何通過在.NET MAUI中嵌入Stripe SDK在您的應用程式中實現信用卡支付的文章。

C# 11中的新功能(用於編碼) - Qiita

https://qiita.com/sh1ch/items/0b6add41584b5ba7f698

用程式碼介紹C# 11的新特性的文章。

用.NET和Swagger管理你的API的多個版本

https://medium.com/@saeedeldah/managing-multiple-versions-of-your-api-with-net and-swagger-47b4143e8bf5

關於如何使用API Explorer將ASP.NET Core Web API版本管理與Swagger結合起來的文章。

從PHP和Go中呼叫用C#編寫的庫 - Qiita

https://qiita.com/Gaku_Ishii/items/ad4abb1e0073519877d7

文章展示瞭如何用Native AOT將.NET程式碼構建為一個本地庫,並從PHP和Go中呼叫它。

圖書館、資源庫、工具等

ugai/narabemi: 快速並排的視訊比較工具

https://github.com/ugai/narabemi

一個用於並排視訊比較的工具。

hadashiA/VYaml: 用於C#的超快、低記憶體佔用的YAML庫,專注於.NET和Unity。

https://github.com/hadashiA/VYaml

一個高效能、節省記憶體的YAML庫,針對.NET Standard 2.1的過渡。

davidfowl/SmartLoadBalancer: 沒有粘性對談的粘性對談

https://github.com/davidfowl/SmartLoadBalancer/

為類似SignalR的東西實驗性地實現了沒有粘性的對談。它的工作原理是反覆嘗試轉發請求,直到一個成功的SignalR伺服器被YARP拉到。

網站、檔案等

推文

Newtonsoft.Json 13.0.1有一個小的退步,沒有影響到大多數人,這被誤認為是不能使用的(就像對13.0.2一樣,因為它打了修補程式但不能使用),並被標記為脆弱版本。

https://twitter.com/jamesnk/status/1600844999783903233?s=12

深入研究

RMS v3.0 Planning · Issue #258 · microsoft/Microsoft.IO.RecyclableMemoryStream

https://github.com/microsoft/Microsoft.IO.RecyclableMemoryStream/issues/258

RecyclableMemoryStream 3.0版本的規劃

版權宣告

由於筆者沒有那麼多時間對國內的一些文章進行整理,歡迎大家為《.NET週報-國內文章》板塊進行貢獻,需要推廣自己的文章或者框架、開源專案可以下方的專案地址提交Issue或者在我的微信公眾號私信。

格式如下:

  • 10~50字左右的標題
  • 對應文章或專案網址存取連結
  • 200字以內的簡介,如果太長會影響閱讀體驗

https://github.com/InCerryGit/.NET-Weekly

.NET效能優化交流群

相信大家在開發中經常會遇到一些效能問題,苦於沒有有效的工具去發現效能瓶頸,或者是發現瓶頸以後不知道該如何優化。之前一直有讀者朋友詢問有沒有技術交流群,但是由於各種原因一直都沒建立,現在很高興的在這裡宣佈,我建立了一個專門交流.NET效能優化經驗的群組,主題包括但不限於:

  • 如何找到.NET效能瓶頸,如使用APM、dotnet tools等工具
  • .NET框架底層原理的實現,如垃圾回收器、JIT等等
  • 如何編寫高效能的.NET程式碼,哪些地方存在效能陷阱

希望能有更多志同道合朋友加入,分享一些工作中遇到的.NET效能問題和寶貴的效能分析優化經驗。由於已經達到200人,可以加我微信,我拉你進群: ls1075