.NET週報【1月第3期 2023-01-20】

2023-01-20 21:00:50

這應該是2023年農曆新年前的最後一篇.NET週報,再次預祝大家新年快樂!

國內文章

看我是如何用C#編寫一個小於8KB的貪吃蛇遊戲的

https://www.cnblogs.com/InCerry/p/building-a-self-contained-game-in-c-under-8-kilobytes-74c3cf60ea04.html

譯者注:這是Michal Strehovský大佬的一篇文章,他目前在微軟.NET Runtime團隊工作,主要是負責.NET NativeAOT功能的開發。我在前幾天看到這篇文章,非常喜歡,雖然它的內容稍微有點過時(還是使用的.NET Core 3.0),不過其中的一些程式設計技巧和思維方式很受用,特意找到Michal大佬要到了授權,翻譯給大家看。

gRPC入門與實操(.NET篇)

https://www.cnblogs.com/newton/p/17033789.html

本文介紹瞭如何.NET中gRPC的入門和程式碼實踐。

dotnet 程式碼優化 聊聊邏輯圈複雜度

https://www.cnblogs.com/lindexi/archive/2023/01/09/17038319.html

本文屬於 dotnet 程式碼優化系列部落格。相信大家都對圈複雜度這個概念很是熟悉,本文來和大家聊聊邏輯的圈複雜度。程式碼優化裡面,一個關注的重點在於程式碼的邏輯複雜度。一段程式碼的邏輯複雜度越高,那麼維護起來的難度也就越大。衡量程式碼的邏輯複雜度的一個維度是通過邏輯圈複雜度進行衡量。本文將告訴大家如何判斷程式碼的邏輯圈複雜度以及一些降低圈複雜度的套路,讓大家瞭解如何寫出更好維護的程式碼。

dotnet 位列Linux基金會發布的 Top 30開源專案

https://mp.weixin.qq.com/s/1cevbNaCjJxGC3jT1OEcMA

如標題所示,經過Linux基金會的統計,dotnet位於Top 30的開源專案。

.NET Core + React 單點登入系統

這是基於.NET Core 3.1、React開發的開源專案,支援賬號密碼、手機簡訊、第三方登入,採用前後端分離架構的單點登入系統。

一款完全國產的基於C#語言開發的跨平臺的文字解析引擎(模板引擎)

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

大家好,我是寶弟!今天給大家分享一款完全國產的基於C#語言開發的跨平臺的文字解析引擎(模板引擎)JNTemplate,它能生成任何基於文字的內容,包括且不限於html,xml,css等,讓前端展示與後端程式碼邏輯分離。同時,它也提供了一個在WebForm與Razor之外的選擇!

Blazor WebAssembly的初次存取慢的優化

https://mp.weixin.qq.com/s/KhK-uvMFrL8qNmk-26r6cQ

Blazor WebAssembly初次存取需要載入很多dll,體積較大,因此第一次載入比較慢。針對此問題Microsoft提供了優化方案:壓縮 https://learn.microsoft.com/zh-cn/aspnet/core/blazor/host-and-deploy/webassembly?view=aspnetcore-6.0

.Net6在Docker環境下操作Selenium.Chrome的那些坑

https://mp.weixin.qq.com/s/y-s-_G7tbNhT0xRG8cl1Bg

本文介紹瞭如何.Net6中實現對某個網址截圖,可通過Selenium模擬存取網址並實現截圖,另外還有遇到的一些問題。

.NET7 一個實用功能-中央包管理

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

依賴管理是 NuGet 的核心功能。Nuget管理單個專案的依賴關係很容易,只需要每個專案維護自己的Nuget依賴與對應版本。在您管理許多不同專案的公共依賴項的情況下,您可以利用 NuGet 的中央包管理功能從一個位置輕鬆完成所有這些工作。

2022年github上Stars排名前十的.NET開源專案

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

2023年已經開始了,在2022年從事.NET開發的你有什麼收穫呢?在過去的2022年裡面,GitHub最受歡迎、Stars最多的專案分別是哪些呢?今天我們分享一下github上Stars排名前十的非官方.NET開源專案。

8KB的C#貪吃蛇遊戲熱點答疑和.NET7版本

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

在之前的一篇文章《看我是如何用C#編寫一個小於8KB的貪吃蛇遊戲》中,介紹了在.NET Core 3.0的環境下如何將貪吃蛇遊戲降低到8KB。不過也有很多小夥伴提出了一些疑問和看法,本文一一為大家解答這些問題。

主題

【英文】.NET 2023年1月更新 .NET 7.0.2, .NET 6.0.13 - .NET部落格

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

.NET 7.0.2和.NET 6.0.13已經發布。

該版本修復了.NET 6中的一個DoS漏洞。 該漏洞允許通過向已釋出的端點傳送惡意請求,造成堆疊溢位,從而進行拒絕服務攻擊。

【英文】ReSharper 2023.1開始公測 | .NET工具部落格

https://blog.jetbrains.com/dotnet/2023/01/19/resharper-2023-1-eap-starts/

ReSharper 2023.1的EAP(早期存取計劃)已經開始。

ReSharper 2023.1 EAP 1包括程式碼檢查方面的改進,如對#region的快速修復,將Span.SequenceEquel重寫為is,以及改進的C++支援。

【英文】Rider 2023.1開始公測 | .NET工具部落格

https://blog.jetbrains.com/dotnet/2023/01/19/rider-2023-1-eap-start/

Rider 2023.1的EAP(早期存取計劃)已經開始。

Rider 2023.1 EAP 1包括Unity的API彈出式檔案連結,在虛幻引擎中建立新類的重新實現的UI,對Docker的快速模式支援,對#regionSpan的快速修復。 SequenceEquel重寫為is,程式碼檢查的改進,以及主工具列的UI修復。

【英文】Visual Studio 2022 17.5 Preview 3來了!

https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-5-preview-3-is-here/

Visual Studio 2022 17.5 Preview 3現已釋出。

  • 通用IDE Shell、Git、編輯器、偵錯程式、診斷器
    • 無障礙檢查器
    • 拼寫檢查器
    • 改進了外部原始碼的偵錯
      • 改進反編譯效能
    • Markdown成為預設編輯器
    • VS 基於意圖的建議
    • 使用Microsoft.Data.SQL.Client連線到SQLServer
  • 迄今為止,在美國,有很多人都在使用".NET "這個名字。
  • C++
    • 支援對括號的著色
    • 在終端開啟開發容器(devcontainer)。
  • 設定
    • 改進winget中的Visual Studio包

【英文】釋出.NET社群工具包8.1!更好、更快的MVVM原始碼生成器,對.NET 7的支援,以及更多

https://devblogs.microsoft.com/dotnet/announcing-the-dotnet-community-toolkit-810/

.NET社群工具包8.1已經發布。

ObservableProperty的自定義屬性,MVVM工具包分析器,MVVM工具包源生成器優化,IObservable<T>信使擴充套件,.NET 7和C# 11支援。

【英文】MinBZK/woo-besluit-broncode-digid-app

https://github.com/MinBZK/woo-besluit-broncode-digid-app

一個名為DigiD的荷蘭應用程式已被作為開放原始碼釋出。 (這是一個全國性的應用,似乎是政府透明度維護活動的一部分)。

該應用程式有1500萬活躍使用者,是用Xamarin.Forms製作的。

【英文】dotnet/maui 7.0.58版服務版本2

https://github.com/dotnet/maui/releases/tag/7.0.58

.NET MAUI 7.0.58服務版本2已經發布。

該版本修復了各種錯誤並更新了Windows App SDK。

【英文】.NET框架1月2023日累積更新預覽 - .NET部落格

https://devblogs.microsoft.com/dotnet/dotnet-framework-january-2023-update/

.NET框架的2023年1月累積更新預覽已經發布。

該版本修復了幾個WPF的錯誤和Socket的一個罕見問題。

【英文】Visual Studio拼寫檢查器預覽版現已釋出 - Visual Studio部落格

https://devblogs.microsoft.com/visualstudio/visual-studio-spell-checker-preview-now-available/

對Visual Studio預覽版中現在可用的拼寫檢查器的介紹。

這篇文章介紹瞭如何使用拼寫檢查器,它檢查哪些模式以及如何客製化它。

文章、幻燈片等

【日文】[C# 12候選特性] IEnumerable的列表模式

https://ufcpp.net/blog/2023/1/list-pattern-enumerable/

C# 12 IEnumerable的候選列表模式匹配。

【日文】[C# 12候選特性] 半自動屬性

https://ufcpp.net/blog/2023/1/semi-auto-property

本文介紹了C#12候選半自動屬性(只有後援欄位是自動生成的)。

它還解釋了初始化器和它們被覆蓋時的行為。

【英文】初學者指南,開始使用C#中的智慧合約

https://dev.to/satyakarki/beginners-guide-to-get-started-with-smart-contract-in-c-3c7e

介紹使用Stratis實現智慧合約,這是一個允許用C#實現智慧合約的平臺。

【英文】.NET Native AOT

https://ericsink.com/native_aot/index.html

該系列文章涉及關於Native AOT的解釋和範例程式碼。

【英文】2022年在C#專案中發現的十大錯誤

https://pvs-studio.com/en/blog/posts/csharp/1020/

由PVS-Studio開發人員發現並報告的2022年開源專案中發現的十大錯誤組合。

【英文】利用.NET UserSecrets來保護敏感資訊 | .NET工具部落格

https://blog.jetbrains.com/dotnet/2023/01/17/securing-sensitive-information-with-net-user-secrets/

介紹如何使用.NET UserSecrets在本地儲存敏感資訊並從你的應用程式中使用它。

使用JetBrains Rider的.NET使用者祕密以及如何從你的應用程式中管理和使用它們。

【英文】新:Visual Studio中更好的搜尋 - Visual Studio部落格

https://devblogs.microsoft.com/visualstudio/new-better-search-in-visual-studio/

對Visual Studio中預覽的新的一體式搜尋的介紹。

【英文】用ASP.NET Core 7.0進行速率限制

https://medium.com/abp-community/rate-limiting-with-asp-net-core-7-0-e7834a94b8c5

介紹.NET 7中的速率限制API以及如何在ASP.NET Core中使用它。

【英文】探索最小化API的模型繫結邏輯:最小化API的幕後 - 第三部分

https://andrewlock.net/behind-the-scenes-of-minimal-apis-3-exploring-the-model-binding-logic-of-minimal-apis/

探索最小化API的模型繫結邏輯:最小化API的幕後故事--第395部分。

這篇文章解釋瞭如何將收到的請求與處理程式引數繫結的機制和流程。

【英文】用ASP.NET Core進行多檔案拖放上傳|Khalid Abuhakmeh

https://khalidabuhakmeh.com/multiple-file-drag-and-drop-upload-with-aspnet-core

如何實現Razor頁面的多檔案拖放式上傳。

【英文】讀取記憶體中的 "物件" - 從堆疊開始

https://chnasarre.medium.com/reading-object-in-memory-starting-with-stacks-aaef54bd521d

關於如何讀取可由診斷協定nettrace接收的物件的有效載荷的解釋。

【英文】學習 DateOnly & TimeOnly

https://dev.to/karenpayneoregon/learn-dateonly-timeonly-23j0

介紹DateOnly和TimeOnly的基礎知識,以及它們在Json.NET、System.Text等庫中的支援。

【日文】PropertyChangedEventManager線上程池中失敗 - Qiita

https://qiita.com/emoacht/items/3f7e216b43431e960751

關於PropertyChangedEventManager``AddListener/RemoveListener必須從同一個執行緒呼叫。

【日文】[C#] 建立並理解你自己的字典(HashTable)

https://zenn.dev/fugi/articles/d2a5ef35e4190f

試圖實現類似Dictionary的結構,並瞭解如何處理雜湊值。

【日文】[C#] 非同步主函數,不允許執行緒使用STA

https://zenn.dev/nin_neko/articles/6f08f2fdace43f

關於以及如何處理當入口點有STAThread屬性但卻是async Task的非同步方法時,執行緒單位沒有被設定為STA。

【日文】[.NET] 你可以在組態檔(如appsettings.json)中寫註釋 - Qiita

https://qiita.com/yaju/items/35d94a20e8e3e8ca268c

Microsoft.Extensions.Configuration.Json(例如appsettings.json)關於允許在JSON中寫JavaScript或C#風格的註釋。

【日文】在ASP.NET Core中建立自定義驗證屬性 - Qiita

https://qiita.com/gushwell/items/d659027304645b30b805

如何在ASP.NET Core中用ValidationAttribute實現自定義驗證屬性。

【日文】在.NET中委託效能的演變

https://medium.com/@skyake/the-evolution-of-delegate-performance-in-net-c8f23572b8b1

.NET 7中PGO的委託優化解析。

【英文】用.NET工作器服務在GitHub上跟蹤你的編碼進度

https://dev.to/sannae/track-my-coding-progress-on-github-with-a-net-worker-service-49g4

一個如何實現工作者服務的例子,以跟蹤GitHub上儲存庫的語言統計資料。

【日文】將using alias用於任意型別

https://ufcpp.net/blog/2023/1/using-alias-any-types/

對通過 "使用"來擴充套件別名可以定義的內容的建議進行評論。

【英文】用BenchmarkDotNet對Linux上的.NET進行分析

https://adamsitnik.com/PerfCollectProfiler/

如何在Linux上用BenchmarkDotNet對.NET進行剖析。

0.13.3中引入的PerfCollectProfiler外掛允許將剖析結果以PerfView、SpeedScope和任何支援perf檔案的工具所能開啟的格式匯出。

開源庫、資源庫、工具

【英文】Dots - 友好的.NET SDK管理器 - Johnnys.News

https://johnnys.news/2023/01/Dots-a-dotnet-SDK-manager

一個用於安裝和解除安裝各種.NET SDK的GUI工具。

【英文】VeloxDB/VeloxDB: 一個物件導向的資料庫,用於用.NET和C#構建下一代的解決方案

https://github.com/VeloxDB/VeloxDB

一個用C#編寫的物件導向的資料庫,適用於.NET平臺。

【英文】otterkit/otterkit: Otterkit COBOL編譯器

https://github.com/otterkit/otterkit

為.NET平臺提供ISO COBOL 2022的編譯器和執行時實現。

【英文】StableDiffusionDiscordBot

https://stablediffusiondiscordbot.azurewebsites.net/

Discord Bot和它的網站,用於用穩定擴散的AI影象生成,等等。

【英文】Marplex/WpfSnowfall: 完全可客製化的WPF降雪控制元件

https://github.com/Marplex/WpfSnowfall

一個允許你在你的WPF應用程式中進行降雪的控制元件。

網站、檔案等

【英文】NuGet包驗證控制 - .NET | 微軟學習

https://learn.microsoft.com/ja-jp/dotnet/fundamentals/package-validation/baseline-version-validator

描述了在.NET 6及以後版本中引入的NuGet包驗證功能。

它可以檢測到從建立NuGet包時指定的基線版本對API的破壞性變化。

【英文】ML.NET教學|10分鐘內入門|.NET

https://dotnet.microsoft.com/ja-jp/learn/ml-dotnet/get-started-tutorial/intro

關於使用ML.NET來確定文字的正負性的教學。

推文

談談.NET 8中Kestrel的命名管道支援。

https://twitter.com/jamesnk/status/1615902642492039180

版權宣告

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