.NET週報 【3月第3期 2023-03-19】

2023-03-21 12:05:05

國內文章

記一次 .NET某汽車零件採集系統 卡死分析

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

前段時間有位朋友在微信上找到我,說他的程式會出現一些偶發卡死的情況,讓我幫忙看下是怎麼回事,剛好朋友也抓到了dump,就讓朋友把 dump 丟給我,接下來用 windbg 探究下到底咋回事。

.NET中委託效能的演變

https://www.cnblogs.com/InCerry/archive/2023/03/14/the-evolution-of-delegate-performance-in-net-c8f23572b8b1.html

.NET中的委託是一項重要功能,可以實現間接方法呼叫和函數語言程式設計。本文介紹委託在以前的.NET中存在效能問題和.NET7.0 .NET8.0版本如何將這一問題徹底解決。

NET 8 預覽版 2 亮點是Blazor

https://www.cnblogs.com/shanyou/archive/2023/03/15/17220483.html

.NET 團隊在2023年3月14日釋出了.NET 8預覽版2,部落格文章地址:https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-2/, 亮點是了對Blazor的一些改進。

為什麼 C# 可能是最好的第一程式語言

https://www.cnblogs.com/shanyou/archive/2023/03/16/17221052.html

縱觀神州大地,漫遊中華網際網路,我看到很多人關注為什麼你應該開始學習JavaScript做前端,而對blazor這樣的面向未來的框架有種莫名的瞧不起,或者為什麼你應該學習Python作為你的第一門程式語言,恕不知有多少公司業務是用Python開發的,Python更多是粘合劑,作為膠水語言來使用。
我用C# 工作了 20多年,我也一直把它當作第一程式語言,幾乎嘗試了任何東西:桌面、物聯網、移動、Web、雲原生- 以及 C# 和 .NET 完美契合的所有地方,特別是當下Chatgpt 還有AI的輔助程式設計時代,你應該考慮從它開始你的開發人員之路。

學習 .NET高階偵錯 個人推薦的10本書

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

昨天訓練營有朋友讓我推薦學習 .NET高階偵錯 的參考書,這裡整理了我個人推薦的 10 本書:這篇文章推薦了10本學習.NET高階偵錯的書籍,分別是:這篇文章推薦了10本學習.NET高階偵錯的書籍,分別是:

  1. .NET高階偵錯
  2. Windows 程式設計偵錯技術內幕
  3. 軟體偵錯 - 第二卷 (上下冊)
  4. Windows 高階偵錯
  5. 深入解析 Windows 作業系統
  6. .NET 和 Windows 應用程式偵錯
  7. C++ 反組合與逆向分析技術揭祕
  8. .NET 記憶體管理寶典
  9. .NET Core 底層入門
  10. 格蠹組合

async 與 Thread 的錯誤結合

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

在 TAP 出現之前,我們可以通過 Thread 來完成一些執行緒操作,從而實現多執行緒和非同步操作。在 TAP 出現之後,有時候為了更高精度的控制執行緒,我們還是會使用到 Thread 。文字講介紹一種錯誤的使用方式,作為讀者的一個參考。

.NET Core 使用 ImageSharp 生成圖片

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

ImageSharp是對.NET Core平臺擴充套件的一個影象處理方案,以往網上的案例多以生成文字及畫出簡單圖形、驗證碼等方式進行探討和實踐。分享一下所在公司專案的實際應用案例,匯出微信二維條碼圖片,圓形頭像等等。

Blazor 在 IoT 領域的前端實踐 @.NET開發者日

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

這篇文章是關於Blazor在IoT領域的前端實踐的主題分享。文章分為兩個部分,第一部分介紹了為什麼要在IoT專案中使用Blazor技術,Blazor給IoT帶來了什麼。第二部分以一個IoT專案舉例,使用Blazor和MAUI技術的落地具體內容,最後還有在開發和偵錯過程中的經驗分享。

入門MasaFramework 系列教學

https://mp.weixin.qq.com/s/3zn_64o-bLfEkJOByzu2VA

這篇文章是一篇關於MasaFramework的入門教學,主要介紹了MasaFramework的基本概念和專案結構。文章首先介紹了MasaFramework是一個基於.Net6.0的後端框架,可以被用於開發Web應用程式、WPF專案、控制檯專案。接著,文章介紹了MasaFramework提供了很多功能的包,很強大,對於Dapr的支援非常好。然後,文章介紹瞭如何使用MasaFramework,包括安裝MasaFramework專案模板和建立專案。最後,文章介紹了MasaFramework的專案結構,包括src/ApiGateways,src/Contracts,src/Services,src/Web四層,以及mfDemo.Shared,mfDemo.Server,mfDemo.WebAssembly三層專案架構。總的來說,這篇文章是一篇非常詳細的MasaFramework入門教學,適合初學者。

.NET Task 揭祕(3)async 與 AsyncMethodBuilder

https://mp.weixin.qq.com/s/1AiEHVuk_FZF15_pth-FJQ

本文是 .NET Task 揭祕 系列部落格的第三篇,主要介紹了 async 與 AsyncMethodBuilder。上文我們學習了 await 這個語法糖背後的實現,瞭解了 await 這個關鍵詞是如何去等待 Task 的完成並獲取 Task 執行結果。並且我們還實現了一個簡單的 awaitable 型別,它可以讓我們自定義 await 的行為。

AsyncMethodBuilder 是狀態機的重要組成部分。如果在一個方法中使用了 await,那麼這個方法就必須新增 async 修飾符。並且這個方法的返回型別通常是 Task 或者 其它 runtime 裡定義的 awaitable 型別。

ASP.NET Core Web API 介面限流

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

這篇文章是一篇技術文章,主要講述瞭如何在ASP.NET Core Web API中實現介面限流的功能。文章中提到了實現介面限流的需求,如何實現介面限流,以及如何使用jMeter進行壓力測試。文章中提供了相關的程式碼和截圖,可以幫助讀者更好地理解文章的內容。

主題

【英文】宣佈 .NET 8 預覽版 2 - .NET 部落格

https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-2/

.NET 8 Preview 2 已經發布。

此版本新增了擴充套件 System.ComponentModel.DataAnnotations 的屬性,並支援反射中的函數指標。

【英文】EF Core 8 預覽版 2:精簡且熟悉 - .NET 部落格

https://devblogs.microsoft.com/dotnet/announcing-ef8-preview-2/

Entity Framework Core 8 Preview 2 已經發布。

本文介紹了 SQLite 中的 JSON 列支援和此版本中提供的 SQL Server/Azure SQL 資料庫中的 HierarchyId 支援。

【英文】.NET 8 Preview 2 中的 ASP.NET Core 更新 - .NET 部落格

https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-8-preview-2/

.NET 8 Preview 8 中對 ASP.NET Core 的更新。

  • 對 Blazor 的 QuickGrid 支援
  • 改進了 Blazor WebAssembly 中 JIT (Jiterpreter) 的效能
  • 檢測多個 [FromBody] 的分析器
  • 用於更有彈性整合的 ProblemDetails 的新 API
  • ObjectPool 上的IResettable 介面
  • 改進的命名管道效能

【英文】Visual Studio 2022 v17.6 Preview 2 現已推出 - Visual Studio 部落格

https://devblogs.microsoft.com/visualstudio/visual-studio-2022-v17-6-preview-2-is-now-available/

Visual Studio 2022 版本 17.6 Preview 2 已經發布。

  • 提高你的生產力
    • Git 階段並在構建期間提交
    • 改進的合併對話方塊
    • 斷點組
    • C++ 儀器分析
    • WSL 上 .NET 的 Profiler Live Graphs
    • 建立 C++ 成員函數
  • 簡化的遊戲開發
    • 虛幻引擎程式碼分析
    • Tim Jones 的 HLSL 工具擴充套件
  • .NET 移動開發
    • 安卓清單編輯器
  • 企業管理
    • 從您的 Intranet 託管和部署 Visual Studio 佈局
    • 安裝程式中可用產品的有限曝光

【英文】你好,語意核心!

https://devblogs.microsoft.com/semantic-kernel/hello-world/

語意核心釋出。

語意核心是一個輕量級 SDK,用於將來自大型語言模型 (LLM)(例如 OpenAI 和 Azure OpenAI 服務)的 AI 提示整合到您的應用程式中。 現在支援 C#,Python 處於預覽支援狀態。

【英文】釋出 v2.5.108 neuecc/MessagePack-CSharp

https://github.com/neuecc/MessagePack-CSharp/releases/tag/v2.5.108

MessagePack-CSharp v2.5.108 已經發布。

自 v2.4.59 以來的更改包括新增可為 null 的註釋、放棄對 .NET 5 的支援、前滾生成器以及各種其他修復和改進。

【英文】Async/Await 在 C# 中的真正工作原理 - .NET 部落格

https://devblogs.microsoft.com/dotnet/how-async-await-really-works/

一篇解釋 C# 中 async/await 工作原理的文章。

它描述了從 APM 和基於事件的非同步模式到基於任務、任務和 ValueTask 的流程,C# 中的編譯時程式碼擴充套件,並詳細解釋了它的工作原理。

【英文】Release 釋出v2.52.0 grpc/grpc-dotnet

https://github.com/grpc/grpc-dotnet/releases/tag/v2.52.0

grpc-dotnet (Grpc.Net) v2.52 已經發布。

此版本現在針對 .NET 6 的 dotnet-grpc 工具,幷包括各種小錯誤修復和改進。

【英文】釋出 v1.2.5 microsoft/WindowsAppSDK

https://github.com/microsoft/WindowsAppSDK/releases/tag/v1.2.5

Windows App SDK 1.2.5 (1.2.230313.1) 釋出。

此版本修復了 Composition 關閉期間的崩潰、動畫即使在螢幕關閉時仍繼續播放的問題,以及 WebView2 中滑鼠和觸控輸入失敗的修復。

【英文】.NET 2023 年 3 月更新 – .NET 7.0.4、.NET 6.0.15 - .NET 部落格

https://devblogs.microsoft.com/dotnet/march-2023-updates/

.NET 7.0.4 和.NET 6.0.15 已經發布。

此版本包含幾個小錯誤修復和改進。

【英文】宣佈 Polyglot Notebooks!Visual Studio Code 中的多語言筆電 - .NET 部落格

https://devblogs.microsoft.com/dotnet/announcing-polyglot-notebooks-harness-the-power-of-multilanguage-notebooks-in-visual-studio-code/

Polyglot Notebooks(以前稱為 .NET Interactive Notebooks)現在作為 Visual Studio Code 的擴充套件在 Marketplace 上普遍可用。

文章、幻燈片等

【日文】關於.NET 8 Preview 2 中新增的輸入值驗證

https://zenn.dev/tomokusaba/articles/bb5cb32470ca8a

它介紹了 .NET 8 Preview 2 中新增的 System.ComponentModel.DataAnnotations 驗證屬性的功能。

【日文】關於 Blazor WebAssembly 中的輸入值驗證

https://zenn.dev/tomokusaba/articles/9fd92c1716ca30

如何在 Blazor WebAssembly 中實現輸入驗證。

【英文】WeAreDotnet 社群

https://medium.com/@tim.cadenbach/wearedotnet-d8ec96685c33

名為#WeAreDotnet 的社群門戶。

【英文】EventStoreDb 入門(C#)

https://medium.com/@no1.melman10/getting-started-with-eventstoredb-c-13411ec08713

說明如何使用事件溯源資料庫 EventStoreDB。

EventStoreDB 本身也在 .NET (C#) 中實現。

【英文】擴充套件 Visual Studio CodeLens 功能 - 第二部分

https://codingwithcalvin.net/extending-visual-studio-codelens-functionality-part-ii/

關於如何在 Visual Studio 中擴充套件 CodeLens 的系列教學。 本文介紹如何實現 CodeLens 回撥。

【日文】經常被遺忘的文化相關問題 | UFCPP

https://ufcpp.net/blog/2023/3/string-order/

啟用全球化不變模式時,處理字串比較中的不變性和序數以及順序中的效能等。

【日文】建立一個可以用XCopy部署的WinUI3最小工程

https://zenn.dev/nin_neko/articles/ecb16042f04c01

關於如何為 XCopy 部署建立一個最小的 WinUI 3 應用程式專案(一種通過複製檔案而不安裝來工作的形式)。

【日文】從 CESU-8 到 UTF-16 的轉換 - Qiita

https://qiita.com/7shi/items/8eae6d909e1b82b35215

如何將 CESU-8(UTF-8 的變體)轉換為 UTF-16。

【英文】Rider 2023.1 中的 Unity DOTS 支援 | .NET 工具部落格

https://blog.jetbrains.com/dotnet/2023/03/16/unity-dots-support-in-rider-2023-1/

引入 Rider 2023.1 中新增的 Unity DOTS 支援。

支援 DOTS 的模板和程式碼生成。

【英文】幫助我們研究 Visual Studio 17.6 預覽版 2 中的新歡迎體驗 - Visual Studio 部落格

https://devblogs.microsoft.com/visualstudio/welcome-experience/

關於 Visual Studio 17.6 Preview 2 中引入的新歡迎頁面。

引入歡迎頁面,它取代了舊的啟動視窗(您可以在其中選擇現有解決方案、建立新專案等)並徵求反饋。

【英文】C# - 使用 Novell Directory Ldap Nuget 包通過 ObjectSid 搜尋 AD 條目

https://dev.to/hbolajraf/c-search-ad-entry-by-objectsid-using-novell-directory-ldap-nuget-package-28il

如何使用 Novell.Directory.Ldap.NETStandard 包根據 ObjectSid 搜尋 Active Directory。

【英文】[ASP.NET Core] 嘗試伺服器傳送的事件

https://dev.to/masanori_msl/aspnet-core-try-server-sent-events-5db2

如何在 ASP.NET Core 中實現伺服器傳送的事件。

【英文】使用 WPF 和 Dyte 構建視訊通話應用程式

https://dyte.io/blog/building-video-calling-app-using-wpf-dyte/

如何實現使用 Dyte 進行視訊通話的 WPF 應用程式,Dyte 是一種處理實時視訊和視訊會議的服務。

【日文】關於 .NET 中的控制檯緩衝區和視窗 - Qiita

https://qiita.com/rougemeilland/items/10f4d94c9343fd8eb708

關於在 .NET 中處理控制檯緩衝區和視窗。 它還涉及 Console.Clear 的行為。

【英文】實現可存取、可檢查的 WPF 樹檢視 - Engineering@Microsoft

https://devblogs.microsoft.com/engineering-at-microsoft/implementing-an-accessible-checkable-wpf-tree-view/

對於由 Accessibility Insights 團隊修改的 WPF 中帶有核取方塊的樹檢視實現。

【英文】在 JetBrains Rider 中使用 Git

https://andrewlock.net/working-with-git-in-jetbrains-rider/

JetBrains Rider中Git的各種操作介紹。

【英文】靜態介面成員、通用屬性、自動預設結構 - 在 Rider 和 ReSharper 中使用 C# 11 | .NET 工具部落格

https://blog.jetbrains.com/dotnet/2023/03/14/static-interface-members-generic-attributes-auto-default-structs-using-csharp-11-in-rider-and-resharper/

在 JetBrains Rider 和 ReSharper 中引入了支援新功能的功能,例如介面中的靜態抽象成員、通用屬性和 C# 11 中結構的自動預設值。

【英文】改進拼寫檢查器 - Visual Studio 部落格

https://devblogs.microsoft.com/visualstudio/improving-the-spell-checker/

在 Visual Studio 2022 17.6 Preview 2 中引入拼寫檢查改進。

它引入了改進的特定於程式語言的字典和排除字典的編碼、更好的特殊情況檢測以及拼寫檢查器的自定義。

【日文】獲取特定資料夾下專案參照的庫列表(.NET)-Qiita

https://qiita.com/karuakun/items/a6149a40d9c775a6665d

關於如何使用 PowerShell 獲取從特定資料夾下的 .csproj 參照的庫列表。

【日文】嘗試從C#-Qiita操作Google Spreadsheet

https://qiita.com/tat_tt/items/b9757cc940338c7deeab

從 C# 使用 Google 表格的說明和讀取資料的範例。

【日文】Azure Functions v3 到 v4 (.NET 7.0)

https://zenn.dev/tessecraft_r/articles/1d3f83025e0830

一篇文章解釋了我如何將 Azure Functions 的 .NET 實現從 v3 遷移到 v4。

【日文】釋出了 ReactiveProperty v9.1

https://zenn.dev/okazuki/articles/release-reactiveproperty-v9_1_0

ReactiveProperty v9.1 新特性介紹。 它解釋了命令的擴充套件方法和對「ReactivePropertiesValidator」的改進等要點。

【日文】C# 11-常數字串範圍內的模式匹配

https://www.c-sharpcorner.com/blogs/c-sharp-11-pattern-matching-on-span-for-constant-string

關於 ReadOnlySpan<char> 可以使用列表模式匹配。

庫、儲存庫、工具

dfederm/ReferenceTrimmer:輕鬆識別可以從 .NET 專案中刪除哪些依賴項

https://github.com/dfederm/ReferenceTrimmer

MSBuild 任務和 Roslyn Analyzer 可以輕鬆找到未使用的依賴項。

Azure/data-api-builder:Azure 資料庫的資料 API 構建器為您的 Azure 資料庫提供現代 REST 和 GraphQL 端點。

https://github.com/Azure/data-api-builder

REST/GraphQL 閘道器伺服器到 Azure 資料庫(CosmosDB、MySQL、PostgreSQL、SQL 資料庫)。

主要用於從 Azure Static Web Apps 存取資料庫。

wilder-minds/MinimalApiDiscovery:一個 .NET Core 庫,用於支援以理智的方式註冊最小 API

https://github.com/wilder-minds/MinimalApiDiscovery

允許您細分(分組)Minimal API 並自動註冊它們的庫。

jsakamoto/BlazingStory:Blazor 的「Storybook」克隆版,Blazor 是一個用於單獨構建 UI 元件和頁面的前端工作室。

https://github.com/jsakamoto/BlazingStory/

UI 元件目錄 Blazor Storybook 的克隆。

https://twitter.com/jsakamoto/status/1635746624759795713

Damian Edwards/RazorSlices:基於輕量級 Razor 的 ASP.NET Core 模板,無需 MVC、Razor Pages 或 Blazor。

https://github.com/DamianEdwards/RazorSlices

在沒有 ASP.NET Core MVC 或 Razor Pages 的情況下使用基於 Razor 的模板的庫。

它主要用於 Minimal API 等用例。 (不使用 ASP.NET Core MVC 但依賴於 ASP.NET Core 框架)

https://twitter.com/DamianEdwards/status/1635404036118827008

推文

https://twitter.com/EgorBo/status/1636818556657516563

版權宣告

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