.NET週報【12月第3期 2022-12-23】

2022-12-26 12:00:57

由於眾所周知的原因,大佬們紛紛加入羊群,筆者也未能倖免,體驗下來這絕對不是普通感冒的症狀,身體不適,熬了幾天,所以本週更新比較晚;另外精力有限,對於國際板塊只有連結沒有簡介,十分抱歉!

在這個艱難時刻,大家照顧好自己和家人,做好防護,祝沒羊的永遠"郭襄",祝已羊的早日康復,沒有一個冬天不可逾越,沒有一個春天不會來臨!

國內文章

從點陣圖到布隆過濾器,C#實現

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

本文將以 C# 語言來實現一個簡單的布隆過濾器,為簡化說明,設計得很簡單,僅供學習使用。

圖解B樹及C#實現(1)

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

本系列將用三篇文章講解B樹的設計理念及如何用 C# 實現一個記憶體版本的B樹:

  1. B樹的定義及資料的插入(本文)
  2. 資料的讀取及遍歷
  3. 資料的刪除

圖解B樹及C#實現(2)資料的讀取及遍歷

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

前一篇文章為大家介紹了 B樹 的基本概念及其插入演演算法。本文將基於前一篇的內容,為大家介紹插入到 B樹 中的資料該怎麼讀取及遍歷,

本文的程式碼基於前一篇文章的程式碼,已經實現的功能可能會被省略,只介紹新增的功能。

推薦一款 線上+離線資料 同步框架 Dotmim.Sync

https://www.cnblogs.com/shanyou/p/DotmimSync.html

微軟高階軟體工程師 Sébastien Pertus 在 GitHub 網站開源了一種跨平臺的關聯式資料庫同步框架 Dotmim.Sync:https://github.com/Mimetis/Dotmim.Sync,該框架基於.NET Standard 2.0 研發,支援在 IOT、 Xamarin、.NET、MAUI 等環境中使用。

我做了第一個ChatGPT .net api聊天庫

https://www.cnblogs.com/qwqwQAQ/p/16981579.html

最近這個ChatGPT很火啊,看了B站上很多視訊,自己非常手癢,高低自己得整一個啊,但是讓我很難受的是,翻遍了github前十頁,竟然沒有一個C#的ChatGPT專案,我好難受啊!那能怎麼辦?自己搞一個吧。

Mqttnet記憶體與效能改進錄

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

MQTTnet是一個高效能的 .NET MQTT庫,它提供MQTT使用者端和MQTT伺服器的功能,支援到最新MQTT5協定版本,支援.Net Framework4.5.2版本或以上。本文講述了筆者閱讀原始碼,發現效能問題和解決效能的過程。

WinUI(WASDK)使用MediaPipe檢查手部關鍵點並通過ML.NET進行手勢分類

https://mp.weixin.qq.com/s/_vRH-u1v3Ebn9ZOSKKtUKw

之所以會搞這個手勢識別分類,其實是為了滿足之前群友提的需求,就是針對稚暉君的ElectronBot機器人的上位機軟體的功能豐富,因為本來擅長的技術棧都是.NET。也剛好試試全能的.NET是不是真的全能就想著做下試試了,MediaPipe作為谷歌開源的機器視覺庫,功能很豐富了,而且也支援c++,翻遍社群果然找到了一個基於MediaPipe包裝的C#版本,叫MediaPipe.NET,於是就開始整活了。

.NET網站國際化策略

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

我所在的公司是做SAAS軟體,使用者群體是面向全球的,因此對應業務系統國際化就是順理成章的事情。其實國際化重點在於多語言支援,本文就從這方面入手和大家介紹。

為什麼 Random.Shared 是執行緒安全的

https://mp.weixin.qq.com/s/-4mlXU-3KDFaEr8E2S4rAQ

在多執行緒環境中使用 Random 類來生成偽亂數時,很容易出現執行緒安全問題。例如,當多個執行緒同時呼叫 Next 方法時,可能會出現種子被意外修改的情況,導致生成的偽亂數不符合預期。本文介紹了為什麼Random.Shared 是執行緒安全的。

通過 CancellationToken 提高 Web 效能

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

在 Web 開發中,經常會遇到這樣的場景:使用者發起一個請求,Web 伺服器執行一些計算密集型的操作,等待結果返回給使用者。這種情況下,如果使用者在等待結果的過程中取消了請求,那麼伺服器端依然會繼續執行計算,這樣就會造成資源浪費。

九哥聊Kestrel網路程式設計第二章:開發一個Fiddler

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

本文講解基於 kestrel 開發類似 Fiddler 應用的過程,讓讀者瞭解 kestrel 網路程式設計裡面的 kestrel 中介軟體和 http 應用中介軟體。由於最終目的不是輸出完整功能的產品,所以這裡只實現 Fiddler 最核心的 http 請求和響應內容檢視的功能。本文章是KestrelApp 專案[2]裡面的一個 demo 的講解,希望對您有用。

使用WPF或AspNetCore建立簡易版ChatGPT使用者端,搭建屬於你自己的私人AI助理

https://mp.weixin.qq.com/s/lsOJ-7op9YoiQdA7LlwaPg

前一天寫的一個ChatGPT伺服器端,貌似大家用起來還不是那麼方便,所以我順便用WPF和AspNetCore的webapi程式做個使用者端吧,通過使用者端來快速存取chatgpt模型生成對話。

記一次 .NET 某工控MES程式 崩潰分析

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

前幾天有位朋友找到我,說他的程式出現了偶發性崩潰,已經抓到了dump檔案,Windows事件紀錄檔顯示的崩潰點在 clr.dll 中,讓我幫忙看下是怎麼回事,那到底怎麼回事呢? 上 WinDbg 說話。

.Net MAUI iOS使用騰訊開放平臺TencentOpenAPI

https://mp.weixin.qq.com/s/6ee7rwUHz2t_ZSUVogD_vQ

本文介紹瞭如何在.Net MAUI iOS使用騰訊開放平臺TencentOpenAPI。

《ASP.NET Core 6框架揭祕》範例演示[34]:快取整個響應內容

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

我們利用ASP.NET開發的大部分API都是為了對外提供資源,對於不易變化的資源內容,針對某個維度對其實施快取可以很好地提供應用的效能。《記憶體快取與分散式快取的使用》介紹的兩種快取框架(本地記憶體快取和分散式快取)為我們提供了簡單易用的快取讀寫程式設計模式,本篇介紹的則是針對針對HTTP響應內容實施快取,ResponseCachingMiddleware中介軟體賦予我們的能力[本文節選《ASP.NET Core 6框架揭祕》第22章]。

主題

釋出 Oracle Entity Framework Core 7

https://medium.com/oracledevs/announcing-oracle-entity-framework-core-7-d89a2495b7db

ReSharper 和 Rider 2022.3.1 Bug 修復內容

https://blog.jetbrains.com/dotnet/2022/12/21/resharper-and-rider-2022-3-1-bug-fixes/

不脫離Visual Studio就能寫markdown - Visual Studio部落格

https://devblogs.microsoft.com/visualstudio/write-markdown-without-leaving-visual-studio/

Visual Studio 粘性捲動現在預覽中 - Visual Studio部落格

https://devblogs.microsoft.com/visualstudio/sticky-scroll-now-in-preview/

KB5022083 對基於WPF的應用程式渲染XPS檔案方式的改變 - Microsoft 支援

https://support.microsoft.com/ja-jp/topic/kb5022083-wpf-ベースのアプリケーションが-xps-ドキュメントをレンダリングする方法の変更-a4ae4fa4-bc58-4c37-acdd-5eebc4e34556

文章、幻燈片等。

擊敗不安全類(函數指標)| UFCPP的部落格

https://ufcpp.net/blog/2022/12/unsafer-unsafe/

.NET 7中的新內容 @bind:after可立即處理輸入資訊(並再次失敗) - Qiita

https://qiita.com/jsakamoto/items/0a265288cacea70634b4

使用應用程式服務認證(Easy Auth)和ASP.NET表單認證同時並存 - Shibayan雜記

https://blog.shibayan.jp/entry/20221218/1671348695

在(C#)介面中具有靜態虛擬成員的通用構造器 - 鐘聲響起的貓

https://ikorin2.hatenablog.jp/entry/2022/12/17/212228

2022年的C#(Incremental)源生成器開發方法 - neue.cc

https://neue.cc/2022/12/16_IncrementalSourceGenerator.html

LibraryImportAttribute是在.NET 7中新增的,我碰了一下它 - Programming Lineage Memandum Blog

https://tan.hatenadiary.jp/entry/2022/12/16/002739

我決心擺脫邪惡和暴虐的T4 |UFCPP的部落格

https://ufcpp.net/blog/2022/12/no-more-t4/

用.NET和WebAssembly做實驗-在AKS的WASI節點池上執行基於.NET的應用程式

https://www.tpeczek.com/2022/12/experimenting-with-net-webassembly.html

使用我最喜歡的靜態分析工具(Code Quality & SAST)也在GitLab上使用

https://zenn.dev/masakura/articles/ff74864c9af28d

利用Blazor和DataFactory輕鬆實現EL應用 - Qiita

https://qiita.com/bitflyer/items/3b4ef34a9bdf5991b8f6

新增新檔案的速度變快了很多 - Visual Studio部落格

https://devblogs.microsoft.com/visualstudio/adding-new-files-just-got-a-lot-faster/

.NET on IBM Power #1 - Qiita

https://qiita.com/Nakaji1106/items/f0761c4d1dce58c0b8d5

C#11允許使用列表模式。

(https://zenn.dev/yuchiki/articles/csharp-list-pattern)

[C#] INumberT實現概述(含小數型別的實現範例) - Qiita

https://qiita.com/YuHima03/items/20b59013d42d294b9839

用.NET 7、Blazor和.NET MAUI構建你自己的播客應用程式 - .NET部落格

https://devblogs.microsoft.com/dotnet/build-your-own-podcast-app-with-dotnet-blazor-and-dotnet-maui/

MQTT與nanoFramework的Node-RED通訊

https://zenn.dev/matsuataru/articles/0237a66beb73db

如何將Xamarin.Android遷移到.NET 6 - Qiita

https://qiita.com/secile/items/10266c6b6bd5b179dc23

當pulumi遇到nuke:一個.NET的愛情故事

https://dev.to/techwatching/when-pulumi-met-nuke-a-net-love-story-4omd

用C#檢測Windows螢幕鎖 - Qiita

https://qiita.com/unasenohkoku/items/380e4fb4613b5abe96ea

處理.NET框架的NuGet包沒有設定依賴關係(NU5218警告) - Qiita

https://qiita.com/mxProject/items/f031321ef0d229659f25

在.NET MAUI中用Azure AD B2C進行認證(先用MicrosoftAccount試試) - Qiita

https://qiita.com/MAUIHighSchool/items/b8faf3aba00082b023ac

不要把非同步和同步混在一起,這很危險 - Qiita

https://qiita.com/superriver/items/1f1b83d2d2c6b70ba408

重新實現String.Format方法 - Qiita

https://qiita.com/t0r/items/f83f6ee4ddca1bcf27eb

從Unity 2021.2看新的C#類 - Qiita

https://qiita.com/Gaku_Ishii/items/23d85defb8339fe3e9c0

在Blazor中使用Handsontable,一個類似Excel的網格JS庫 - Qiita

https://qiita.com/yaju/items/bcca337af393f15a6795

Rider 2022.3增加了從JSON建立C#類和Record的能力 - Qiita

https://qiita.com/RyotaMurohoshi/items/0c6730d0988b022378e6

Rider 2022.3和ReSharper 2022.3的IL瀏覽器現在可以將IL反編譯為C# - Qiita

https://qiita.com/RyotaMurohoshi/items/1f8244f0af50ad30583e

C# 如何編寫原始碼生成器 第1/5部分:規劃

https://kafkawannafly.medium.com/c-how-to-write-a-source-generator-part-1-5-planning-6b4ab6ea5f63

使用Blazor WASM登入後,Azure AD安全組中的授權問題

https://zenn.dev/okazuki/articles/auth-securitygroup-blazorwasm

Mark2,一個用Blazor WebAssembly構建的分數表系統,現在已經開放原始碼 - Qiita

https://qiita.com/kaorumori/items/5b7255e3244159b082d3

在.NET中使用程式碼優先的gRPC(gRPC-Web) - Qiita

https://qiita.com/michi_wkwk/items/194276f0014df74cac41

.NET 7: 原始碼中可疑的地方和錯誤

https://dev.to/sergvasiliev/net-7-suspicious-places-and-errors-in-the-source-code-cgd

用Cardboard做一個遊戲,作為你今年的聖誕禮物 - Qiita

https://qiita.com/secile/items/69928aa1e52152034489

Blazor 一個關於用WebAssembly開發新業務系統的故事

https://zenn.dev/rkatsura/articles/4b0e0b3dbb9a59

讓我們在Unity中也使用Index/Range! - Qiita

https://qiita.com/Euglenach/items/c433afe78d72fc1a18fc

SoundMaker,在C#中生成像老遊戲的聲音 - Qiita

https://qiita.com/DTB_AutumnSky/items/8d78520567211d9a8dd2

FrogNote,一款筆記、管理和思考軟體 - Qiita

https://qiita.com/DTB_AutumnSky/items/1d691e2428ac7fa9330c

嘗試在Unity中生成System.Text.Json原始碼 | Yucchiy的說明

https://blog.yucchiy.com/2022/12/csharp-advent-calendar-system-text-json-unity/

圖書館、資源庫、工具等

nenoNaninu/TypedSignalR.Client.TypeScript。TypeScript源生成器,通過分析C#型別定義來提供強型別的SignalR使用者端。

https://github.com/nenoNaninu/TypedSignalR.Client.TypeScript

mxProject/WindowsFormGenericHost: 這是一個用於Generic Host的擴充套件庫。在Generic Host上執行一個Windows Forms應用程式。

https://github.com/mxProject/WindowsFormGenericHost

Introduction | Cadl

https://microsoft.github.io/cadl/

網站、檔案等

推文


https://twitter.com/timheuer/status/1603880562204495877?s=12


https://twitter.com/ufcpp/status/1605378308882935809?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