.NET週報【12月第1期 2022-12-08】

2022-12-12 06:00:48

國內文章

CAP 7.0 版本釋出通告 - 支援延遲訊息,效能炸了?

https://www.cnblogs.com/savorboard/p/cap-7-0.html)

今天,我們很高興宣佈 CAP 釋出 7.0 版本正式版,我們在這個版本中帶來了大批新特性以及對效能的優化和改進。

使用.NET7和C#11打造最快的序列化程式-以MemoryPack為例

https://www.cnblogs.com/InCerry/p/how-to-make-the-fastest-net-serializer-with-net-7-c-11-case-of-memorypack.html

本文是一篇不可多得的好文,MemoryPack 的作者 neuecc 大佬通過本文解釋了他是如何將序列化程式效能提升到極致的;其中從很多方面(可變長度、字串、集合等)解釋了一些效能優化的技巧,值得每一個開發人員學習,特別是框架的開發人員的學習,一定能讓大家獲益匪淺。

記一次 .NET 某電子廠OA系統 非託管記憶體洩露分析

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

這周有個朋友找到我,說他的程式出現了記憶體緩慢增長,沒有回頭的趨勢,讓我幫忙看下到底怎麼回事,據朋友說這個問題已經困擾他快一週了,還是沒能找到最終的問題,看樣子這個問題比較刁鑽,不管怎麼說,先祭出 WinDbg。

MasaFramework -- 領域驅動設計

https://www.cnblogs.com/zhenlei520/p/16945150.html

本文介紹了什麼是領域驅動設計,另外如何通過MasaFramework實現領域驅動設計。

CA週記 - 20年的 .NET ,更需要 00 後的你

https://mp.weixin.qq.com/s/reWHEi-LxPqh6JCoORke8A

.NET 20 週年, 在國內有一大批和 .NET 一起成長的開發者,有一大批在不同行業採用 .NET 作為解決方案的企業。或者你會經常聽到很多的大神說他的 .NET 經歷,也會聽到 .NET 「牛逼」 的故事,更會聽到用 .NET 不用「996」的神話。但對於一個完整的技術生態,作為一名 .NET"老兵「 應該讓更多的年輕人學習 .NET , 讓更多新的創意通過 .NET 創造。

Unity的未來,是固守Mono,還是擁抱CoreCLR?

https://mp.weixin.qq.com/s/062T1v7lcCxW9OwsThDp9A

Unity堅定的擁抱.NET標準生態,正全速向CoreCLR遷移。

使用 C# 開發的現代輕量級 Windows 文字編輯器

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

你好,這裡是 Dotnet 工具箱,定期分享 Dotnet 有趣,實用的工具和元件,希望對您有用!Notepads 是一個具有簡約設計的現代化輕量級文字編輯器,在 github 上開源,由微軟大佬 Jiaqi Liu 開發。

ShardingCore 7.0 版本釋出

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

NCC ShardingCore 是一款 EntityFramework Core based 高效能、輕量級、分表分庫、讀寫分離解決方案,具有零依賴、零學習成本、零業務程式碼入侵等特點。ShardingCore 7.0 已於近期釋出。

動態編譯庫 Natasha 5.0 版本釋出

https://mp.weixin.qq.com/s/80W6Fb2gCdGJaoNp33S3pA

動態編譯庫 Natasha 5.0 於十月份釋出,此次大版本更新帶來了強大的相容性支援,目前 Natasha 已支援 .NET Standard 2.0 及 .NET Core 3.1 以上版本(包括 .NET Framework)了。

推薦一套全功能的軟NVR介面平臺

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

大家好,寶弟今天給大家推薦一套全功能的軟NVR介面平臺AKStream,AKStream是一套全功能的串流媒體管理控制介面平臺。整合GB28181,RTSP,RTMP,HTTP等裝置推拉流控制、PTZ控制、音視訊檔錄製管理、音視訊檔裁剪合併等功能與一體AKStream使用.Net6框架,採用C#語言編寫。

使用.NET開發一個螢幕OCR工具

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

本文將介紹使用.NET開發的一款桌面截圖 OCR 工具,軟體已開源,地址:https://github.com/sangyuxiaowu/Snipping_OCR

如何序列化派生類

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

本文介紹了System.Text.Json返回抽象類集合時無法處理派生類的問題,並給出瞭解決方案。

主題

C#活動日程 | 2022年活動日程 - Qiita

https://qiita.com/advent-calendar/2022/csharplang

2022年的C#活動日程。

2022年的C#活動

https://csadvent.christmas/

2022年英語圈的C#活動日程。

Rider 2022.3:支援.NET 7 SDK、C#11的最新版本、主要的效能改進,以及更多新特性!| The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/12/07/rider-2022-3/

Rider 2022.3已經發布。

這篇文章涵蓋了這個版本中的以下主題

  • 效能改進
  • 支援.NET 7 SDK
  • 支援WSL2
  • UX/UI的改進
    • 對接工具視窗
    • 新的主工具條
  • 最新的C#特性
  • 網站開發更新
  • 遊戲開發更新
  • NuGet支援
    • 中央軟體包管理和漏洞版本檢測
  • 對ARM64支援的早期預覽
    • 支援在ARM平臺的Windows和Linux上執行
  • 其他亮點
    • 內建dotMemory macOS和Linux支援等。

ReSharper 2022.3釋出,具有更多的C# 11功能,NuGet漏洞檢測,並支援Visual Studio ARM64.| The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/12/07/resharper-2022-3/

ReSharper 2022.3已經發布。

這篇文章涵蓋了這個版本中的以下主題

  • C#支援
    • C# 11的特點
    • 語言注入
    • 全球進口水溝標誌
  • 漏洞版本的依賴檢測
  • 支援ARM64上的Visual Studio
  • 動態程式分析的資料庫檢查
  • 支援C++
  • 雜項。
    • 反編譯器的更新和GraphML格式的型別和專案依賴關係圖的匯入/匯出

dotCover, dotMemory, dotPeek, and dotTrace 2022.3釋出!| The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/12/07/dotcover-dotmemory-dotpeek-dottrace-2022-3/

dotCover, dotMemory, dotPeek 和 dotTrace 2022.3已經發布。

  • dotCover:增加了對ARM64上的Windows和ARM32上的Linux執行時的支援
  • dotMemory: 現在可以在Linux和macOS Rider上使用,並支援ARM64的Windows。
  • dotPeek:現在支援靜態抽象和通用屬性等新功能
  • dotTrace:增加了對ARM64上的Windows和ARM32上的Linux執行器的支援,對快照分析進行了一些改進,取消了效能檢視。

升級Azure Pipelines 的.NET Agent - Azure DevOps部落格

https://devblogs.microsoft.com/devops/upgrade-of-net-agent-for-azure-pipelines/

宣佈將Azure Pipelines的.NET Agent從.NET Core 3.1升級到.NET 6。

為了支援新的作業系統和架構,並且因為對.NET Core 3.1的支援將於12月13日結束,所以我們將於12月13日推出.NET Core 3.1。

新的代理將分三個階段推出。 第一階段為預覽版,有一個新聞釋出版本可供下載和測試;第二階段為微軟託管的代理池的更新;第三階段為自我託管的代理產品。

這篇文章還包含了關於自我託管池中的更新的說明和常見問題。

釋出 ILSpy 8.0 Preview 3 - icsharpcode/ILSpy

https://github.com/icsharpcode/ILSpy/releases/tag/v8.0-preview3

ILSpy 8.0 Preview 3已經發布。

這個版本包括對C# 11必要成員的支援,對Roslyn模式檢測的更新,以及其他錯誤和改進。

文章、幻燈片等。

(C#)在沒有字串插值的情況下獲得字串插值結果 - 鈴鐺為貓而響

https://ikorin2.hatenablog.jp/entry/2022/11/29/201801

文章介紹了一個駭客技術,如果你用CallerArgumentExpression作為使用InterpolatedStringHandler的處理程式建構函式的第一個引數,你可以在格式化之前得到字串。

然而,這種行為並不是原來所期望的,可能會被修復。

改進了Rider 2022.3的啟動效能 | .NET工具部落格

https://blog.jetbrains.com/dotnet/2022/12/01/improved-startup-performance-in-rider-2022-3/

關於改進Rider 2022.3(現在的EAP)中的啟動效能的文章。

Rider 2022.3在IDE冷啟動、專案載入時間、檔案和組合掃描、垃圾收集和記憶體使用等方面進行了改進。

第一天:如何使用Moq為HttpClient編寫測試

https://dev.to/canro91/how-to-write-tests-for-httpclient-using-moq-2i9e

關於用Moq為HttpClient呼叫編寫測試的文章。

用AsyncLocal傳遞上下文

https://medium.com/@norm.bryar/conveying-context-with-asynclocal-91fa474a5b42

關於用AsyncLocal<T>實現環境上下文(跨多個函數、元件和任務共用資料)的文章。

Visual Basic 2022年回顧 - Qiita

https://qiita.com/yaju/items/882e1de76a763e098fce

一篇回顧文章,介紹了2022年關於Visual Basic的事件和文章。

C# 探索C#定位記錄中引數數量的上限

https://zenn.dev/shimat/articles/5b81d6627491ab

文章研究了C#9中引入的記錄型別的位置引數上界。

這篇文章還討論了JSON序列化器中的上限。

介紹.NET 7的LINQ中新增的方法 - Qiita

https://qiita.com/RyotaMurohoshi/items/71a84fe7a5cf8df57054

文章介紹了在.NET 7中為LINQ新增的OrderOrderDescending方法。

災難性的回溯:正規表示式如何能導致ReDoS漏洞?

https://dev.to/unicorn_developer/catastrophic-backtracking-how-can-a-regular-expression-cause-a-redos-vulnerability-aia

關於正規表示式回溯導致的ReDoS漏洞的文章。

它描述了各種正規表示式模式及其執行時間,並介紹了避免災難性回溯的方法。

試用C# 11的一些新功能 - Qiita

https://qiita.com/haruka_kotani/items/6f470579b86b005c6cb9

一篇簡要介紹C# 11新特性的文章:原始字串字面、換行字串完成、UTF-8字串字面、必要成員和檔案本地型別。

在Windows開發環境中建立一個Rider(僅容器WSL)。

https://zenn.dev/dynamitecoolguy/articles/17612f6624da4d

關於如何在Windows的Rider上使用WSL容器構建ASP.NET Core開發環境的文章。

AWS說 .NET開源遭遇 "嚴重的資金不足 "

https://www.theregister.com/AMP/2022/12/01/net_open_source_heavily_underfunded/

關於AWS對開源的投資的文章。

我想改變Visual Studio 2022中IntelliCode輸入建議的適用鍵| Butisacchi

https://blog.azure.moe/2022/12/03/visual-studio-2022-の-intellicode-の入力候補の適用キーを変えたい/

關於如何從Tab鍵改變IntelliCode(所謂的AI程式碼完成)的確認的文章。

它說你可以在Visual Studio中改變設定,用→(右方向鍵)確認(你不能把它改為任何鍵)。

原始字串的空白字元 | 未經證實的飛行C部落格

https://ufcpp.net/blog/2022/12/rawstringwhitespace/

關於C# 11對原始字串字元中空白的處理的文章。

它解釋了各種空白字元以及在縮排中如何處理它們。

.NET註釋月刊|2022年12月|.NET工具部落格

https://blog.jetbrains.com/dotnet/2022/12/05/net-annotated-monthly-december-2022/

jetbrains公司於2022年12月組合了與.NET有關的資訊。

Stackalloc的自然型別 | 不明飛行物C部落格

https://ufcpp.net/blog/2022/12/stackalloc-natural-type/

一篇關於stackalloc確定的自然型別如何根據描述方式而變化的文章,作為確定變數型別時的一種推論。

例如,var a = stackalloc byte[10];會有型別指標(byte*),但var a = (stackalloc byte[10]);會有Span<byte>

.NET MAUI社群工具包的新內容 - .NET部落格

https://devblogs.microsoft.com/dotnet/whats-new-in-the-dotnet-maui-community-toolkit/

關於.NET MAUI社群工具包的新功能的文章。

文章解釋了新增加的元件和平臺支援,以及已釋出版本(1.4.0、2.0.0和3.0.0)之間的差異。

  • 擴張器檢視
  • DockLayout
  • 狀態容器(StateContainer)
  • 支援Tizen
  • 支援.NET 7
  • MAUI.Markup Toolkit
  • 釋出版本

在Visual Studio中構建一個新的JavaScript提示體驗 - Visual Studio部落格

https://devblogs.microsoft.com/visualstudio/building-a-new-javascript-linting-experience-in-visual-studio/

文章提供了關於ESLint支援的背景,這是Visual Studio 2022 17.4中的新內容。

這篇文章描述了由vscode-eslint啟發的LSP擴充套件,包括啟用服務的過程。

WinForm的流程外設計器的自定義控制元件 - .NET部落格

https://devblogs.microsoft.com/dotnet/custom-controls-for-winforms-out-of-process-designer/

這篇文章解釋瞭如何在WinForms的.NET Core及以上版本的程序外設計器中支援自定義控制元件,該設計器在Visual Studio中使用。 它展示瞭如何通過一個範例專案進行遷移。

用.NET中的Serilog記錄到亞馬遜雲觀察--雲觀察入門

https://codewithmukesh.com/blog/amazon-cloudwatch-logging-serilog-dotnet/

文章描述瞭如何使用Serilog從ASP.NET Core(M.E.L.ILogger)到Amazon Cloudwatch的紀錄檔。

介紹C#11:字串插值表示式中的換行符

https://anthonygiretti.com/2022/12/04/introducing-c11-newlines-in-string-interpolation-expressions/

關於C#11如何允許在字串插補括號中使用換行符的文章。

用GitHub Actions測量.NET專案的程式碼覆蓋率。

https://zenn.dev/shimat/articles/03ad92427cbed6

文章介紹了使用GitHub Actions從拉動請求構建時如何測量程式碼覆蓋率,以及如何在評論中留下報告。

我想在C#(.NET Core 3.1, .NET 6)執行時替換系統時區(使TimeZoneInfo.Local返回UTC) - Qiita

https://qiita.com/fukasawah/items/c42b586745be56fed674

關於如何使TimeZoneInfo.Local返回一個UTC的值,忽略系統時區的文章。

文章介紹瞭如何通過強行用反思代替來處理這個問題,以及嘗試的原因。

Blazor 準備用WebAssembly使用多執行緒(等待.NET 8) - Qiita

https://qiita.com/kaorumori/items/d6d68987b8468f8f6b32

文章介紹了計劃在.NET 8中用WebAssembly瀏覽器應用程式(不是Blazor)執行Blazor WebAssembly的多執行緒功能的步驟,作為.NET 7的實驗性功能。

這篇文章證實了在實際負載下使用多個核心。

如何在沒有Mac的情況下只用Windows偵錯iOS應用程式(.NET MAUI) - Qiita

https://qiita.com/MAUIHighSchool/items/1ffcfa508342fc250757

關於如何在Windows上直接從Visual Studio部署和偵錯iOS應用程式的文章。

C# 11 (NET 7)中的新功能與互動式範例

https://medium.com/entech-solutions/new-features-in-c-11-net-7-with-interactive-examples-c8e4e5ea1e5a

文章展示了使用C# 11特性並使該程式碼在.NET Fiddle中可執行的例子。

使用Channels並行處理資料

https://maciejz.dev/processing-data-in-parallel-channels/

文章展示瞭如何使用System.Threading.Channels實現並行處理資料的程式碼。

用Roslyn檢測和刪除死程式碼

https://jason-ge.medium.com/detect-and-remove-dead-code-with-roslyn-26e741b20d3c

關於如何使用Roslyn來檢測和刪除死程式碼(未使用的型別)的文章。

如何在MAUI中使用SwiftUI元件

https://medium.com/@tema.denisoff/how-to-use-swiftui-components-in-maui-f43c54d2173c

關於如何在.NET MAUI中使用Swift UI元件的文章。

包括如何為Swift UI建立和使用UIKit包裝器。

基於SwiftUI檢視的功能性MAUI控制元件

https://medium.com/@tema.denisoff/functional-maui-control-based-on-swiftui-view-e23135d1f2bc

關於如何從.NET MAUI以功能性方式實現SwiftUI元件的文章,包括屬性繫結等。

C# 中的null運運算元(??) 的優先權和約束規則 - Qiita

https://qiita.com/denkiuo604/items/87345ce8031640b37e7a

本文討論了C#中空凝聚運運算元(??)的優先順序和繫結規則。 以及在C#中的優先順序和連線規則。

為什麼.NET 7是開始C# SIMD程式設計的最佳場所。

https://zenn.dev/pcysl5edgo/articles/d3e787599c5c8b

與.NET 6相比,在C#中編寫利用SIMD的程式碼更容易,因為不再需要fixed,也不再需要在x64和ARM64之間進行分支。

https://dev.classmethod.jp/articles/net-annotations-lambda-framework/

通過AWS預覽版中的.NET註釋Lambda框架,在.NET中實現無伺服器API(Lambda+API閘道器)。

如何在C#11中構建MemoryPack--世界上最快的二進位制序列化器--演講稿

https://speakerdeck.com/neuecc/c-number-11-niyorushi-jie-zui-su-bainarisiriaraiza-memorypack-nozuo-rifang

幻燈片展示瞭如何在實現名為MemoryPack的快速序列化器的獨創性基礎上,對C# 11的語言特性、Source Generator和.NET庫進行現代利用。

圖書館、資料庫、工具等。

DotNetBrowser | 用於WPF和WinForms應用程式的.NET網路瀏覽器

https://www.teamdev.com/dotnetbrowser

一個基於Chromium的商業元件庫,用於WPF和Windows Forms中的嵌入式瀏覽器(所謂的WebView)。

它與CefSharp的不同之處在於,它有一個託管模式(與CefSharp相比,它在一個更外部的程序中執行),並且可以輕鬆地啟用視訊支援。

featbit/featbit: 一個可延伸的、高效能的特徵管理和漸進式實驗平臺

https://github.com/featbit/featbit

用於管理特徵標誌的應用伺服器。

開發者新聞 - Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=MadsKristensen.DeveloperNews

一個實驗性的擴充套件,在Visual Studio中帶回了開發者的新聞。

快速Endpoints

https://fast-endpoints.com/

ASP.NET的一個框架,用於實現所謂的Request-Endpoint-Response(REPR)模式,取代了Minimal API和MVC。

maraf/dotnet-wasm-react: 在反應元件內的WASM上的.NET

https://github.com/maraf/dotnet-wasm-react

從React元件處理.NET WebAssembly的範例程式碼。

vscode-pets - Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=tonybaloney.vscode-pets

一個允許你在Visual Studio Code內擁有寵物的擴充套件。 呼叫mod寵物將帶來dotnet-bot(紫色的那個)。

網站,檔案,等等

推文


https://twitter.com/dotnetonAWS/status/1533841159436611587

https://pages.awscloud.com/dotNETOpenSourceOnAWSCreditsProgram.html

亞馬遜為.NET開源專案提供AWS積分和資金的支援,目前以資助如FluentValidation等專案。


在這裡,我們要向大家介紹的是".NET Conf 2022 "的視訊,以及一張關於該內容的筆記思維導圖,目前還是日文版。

https://twitter.com/jsakamoto/status/1597555960951631872?s=12&t=yjMpM4TnEEFCnbK7AUbr1A


Xamarin.Forms的MessageCentre已被廢棄,因此建議使用.NET Community Toolkit的WeekReferenceMessenger。

https://twitter.com/JamesMontemagno/status/1599101553813880839


討論C#語言設計和工作組會議記錄的可用性。

https://twitter.com/davidfowl/status/1600001951970000896

深入挖掘

[Breaking change]: WebApplicationBuilder給予ASPNET_字首的環境變數較低的優先權 - 問題#498 - aspnet/Announcements

https://github.com/aspnet/Announcements/issues/498

在.NET 7之前的ASP.NET Core中,ASPNET_字首的環境變數衍生設定覆蓋了命令列引數和DOTNET_字首值,但在.NET 7及以後的版本中,用ASPNET_字首指定不能使用命令列引數和 一個破壞性的改變,即帶有 DOTNET_字首的規範取代帶有命令列引數或 DOTNET_字首的規範。

VS2022在Nuget上的搜尋結果 - Visual Studio Feedback

https://developercommunity.visualstudio.com/t/VS2022-Search-results-on-Nuget/10163787

Visual Studio 2022的NuGet管理介面中的一個bug,即搜尋後稍微卷動一下可能就看不到第一個結果了。

版權宣告

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

格式如下:

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

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

.NET效能優化交流群

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

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

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