國內文章
.NET 7 的 AOT 到底能不能扛反編譯?
https://www.cnblogs.com/huangxincheng/p/16917197.html
在 B 站,公眾號上發了一篇 AOT 的文章后,沒想到反響還是挺大的,都稱贊這個東西能抗反編譯,可以讓破解難度極大提高,可能有很多朋友對逆向不了解,以為用 ILSpy
,Reflector
,DnSpy
這些工具打不開就覺得很安全,其實不然,在 OllyDbg
,IDA
,WinDBG
這些逆向工具面前一樣是裸奔。
關于 .NET 在不同操作系統中 IO 文件路徑拼接方法,升級 .NET 7 后注意到的一個知識點
https://www.cnblogs.com/berkerdong/p/16920239.html
.NET 現在支持跨平臺這件事情已經是眾所周知的特點了,雖然平臺整體支持跨平臺了,但是我們的代碼如果真的想要實現跨平臺運行其實還是有些小細節要注意的,今天想要記錄分享的就是關于 文件 I/O 操作時路徑的拼接問題。
.NET 性能優化-使用內存+磁盤混合緩存
https://www.cnblogs.com/InCerry/p/dotnet-opt-per-use-hybrid-cache.html
經過一段時間的研究,筆者實現了一個基于微軟 FasterKv 封裝的進程內混合緩存庫(內存+磁盤),它有著更加易用的 API,接下來就和大家討論討論它。
你認識的 C# foreach 語法糖,真的是全部嗎?
https://www.cnblogs.com/JulianHuang/p/16907679.html
本文的知識點其實由 golang 知名的 for 循環陷阱發散而來,對應到我的主力語言 C#, 其實牽涉到閉包、foreach。為了便于理解,我重新組織了語言,以倒敘結構行文。
從 .NET 6 更新到 .NET 7
https://mp.weixin.qq.com/s/94PKmYtcuKslTldrxXKiTg
.NET 7 已經發布了一段時間了,將幾個服務升級到了 .NET 7,升級還是比較順利的,也有遇到幾個問題,分享一下。
MASA Framework 事件總線 - 跨進程事件總線
https://mp.weixin.qq.com/s/ZWlJN52WiXcWwxQ3lOQuBg
跨進程事件總線允許發布和訂閱跨服務傳輸的消息, 服務的發布與訂閱不在同一個進程中,在 MASA Framework 中, 跨進程總線事件提供了一個可以被開箱即用的程序。
Silky 微服務框架
https://github.com/liuhll/silky
在.NET 平臺下的微服務應用開發框架,支持微服務場景的諸多特性,如服務治理、RPC 通信、鏈路跟蹤、分布式事務等。
聊一聊如何截獲 C# 程序產生的日志
https://mp.weixin.qq.com/s/5VtFnzuA8sKMNsBS9HhgEQ
前段時間分析了一個 dump,一頓操作之后,我希望用外力來阻止程序內部對某一個 com 組件的調用,對,就是想借助外力實現,如果用 windbg 的話,可以說非常輕松,但現實情況比較復雜,客戶機沒有 windbg,也不想加入任何的手工配置,希望全自動化來處理,看看我是如何實現的。
kotlin 的 suspend 對比 csharp 的 async&await
https://mp.weixin.qq.com/s/DQMpsA9HyF4VfbiEl_M5tQ
協程的出現大大降低了異步編程的復雜度,可以讓我們像寫同步代碼一樣去寫異步代碼,如果沒有它,那么很多異步的代碼都是需要靠回調函數來一層層嵌套,這個在我之前的一篇有介紹 rxjava 回調地獄-kotlin 協程來幫忙,本篇文章主要介紹:
kotlin 的 suspend 函數在編譯生成了怎樣的代碼
csharp 的 async&await 在編譯生成了怎么樣的代碼
這兩者相比較,引發怎樣的思考
用最少的代碼模擬 gRPC 四種消息交換模式
https://mp.weixin.qq.com/s/df_GvlGWiPIRVrd1OmHfwA
我們知道,建立在 HTTP2/3 之上的 gRPC 具有四種基本的通信模式或者消息交換模式(MEP:Message Exchange Pattern),即 Unary、Server Stream、Client Stream 和 Bidirectional Stream。本篇文章通過 4 個簡單的實例演示它們在.NET 平臺上的實現原理,源代碼從這里查看。
C# 逆變的具體應用場景
https://mp.weixin.qq.com/s/6yVqPhj0V9P7g4XtwREpZg
早期在學習泛型的協變與逆變時,網上的文章講解、例子算是能看懂,但關于逆變的具體應用場景這方面的知識,我并沒有深刻的認識。
話題
.NET7 GRPC 性能表現亮眼
https://github.com/LesnyRumcajs/grpc_bench/discussions/310
2022 年 11 月 27 日 gcnyin 大佬提交了 grpc_bench 的框架升級的 PR(將各個語言的的版本都升級了),在預覽測試結果中 dotnet_grpc 以14w/s的成績取得了第一名。

AppHarbor 正在關閉 - AppHarbor
https://blog.appharbor.com/2022/11/09/shutting-down-appharbor
.NET 應用程序托管服務 AppHabor 宣布,它將于 12 月 5 日關閉。(11 月 9 日)。
在該日期之后,所有的數據,包括網站、應用程序和數據庫,都將不再能夠被訪問。
給嬰兒看的 C
https://lp.jetbrains.com/csharp-for-babies/
JetBrains 的一本電子書,幫助嬰兒了解 C#。
一本有插圖的圖畫書,對 A 到 Z 的單詞進行簡單的解釋。
JamesNK/Newtonsoft.Json 13.0.2 版發布
https://github.com/JamesNK/Newtonsoft.Json/releases/tag/13.0.2
Newtonsoft.Json(JSON.NET)13.0.2 已經發布。
這個版本有幾個新功能和錯誤修正,包括支持 DateOnly 和 TimeOnly,以及增加了 UnixDateTimeConverter.AllowPreEpoch。
發布 ComputeSharp 2.0 - 通過 DirectX 12 和 D2D1 在 GPU 上輕松運行 C#!
https://sergiopedri.medium.com/announcing-computesharp-2-0-run-c-on-the-gpu-with-ease-through-directx-12-and-d2d1-be4f3f2312b4
ComputeSharp 2.0 已經發布。
2.0 已經進行了大量的重寫,其特點是改變了源代碼生成器而不是運行時代碼生成器,許多新的 API,支持 D2D1 像素著色器,并引入了 XAML 控件,以便與 UWP 和 WinUI 3.1 整合。
這篇文章介紹了 ComputeSharp,它是如何工作的,以及它的部分內容,如 XAML 支持和 D2D1 像素著色器。
.NET MAUI 現在可以在 Visual Studio for Mac 17.4 中使用 - Visual Studio 博客
https://devblogs.microsoft.com/visualstudio/net-maui-is-now-available-in-visual-studio-for-mac-17-4/
Visual Studio for Mac 17.4 中的.NET MAUI 支持已經發布。
類似于 Windows 上的 Visual Studio 的.NET MAUI 開發,現在可以使用。對 XCode 14.1 的支持將很快發布,C#熱重載和 XAML 實時預覽等功能將在未來實現。
Rider 2022.3 EAP 9
https://www.jetbrains.com/rider/nextversion/
https://twitter.com/jetbrainsrider/status/1596198425745391621?s=12
Rider 2022.3 EAP 9(早期訪問預覽)已經發布。
支持.NET 7 SDK(包括更新的項目模板、中央包管理和 C# 11),支持虛幻引擎 5.1,后端遷移到.NET 7 的性能改進,默認情況下的 UI 新的工具條 ,以及 C#中的機器學習代碼完成。

ReSharper 2022.3 EAP 9
https://www.jetbrains.com/resharper/nextversion/
https://twitter.com/resharper/status/1596198977795657729?s=12
ReSharper 2022.3 EAP 9(早期訪問預覽)已經發布。
該版本擴展了 EAP 8 對 ARM64 的支持,dotCover、dotTrace、dotMemory 和 ReSharper 命令行工具現在支持 ARM64。其他錯誤也得到了修復,在為正式發布做準備。

文章、幻燈片
.NET 序列化綜述 2022
https://aloiskraus.wordpress.com/2022/11/23/net-serialization-roundup-2022/
文章比較了.NET 中各種序列化器(二進制和 JSON)的序列化、反序列化和啟動的性能。
利用 Web Live Preview 和 Telerik 提高你的生產力 - Visual Studio 博客
https://devblogs.microsoft.com/visualstudio/improve-your-productivity-with-web-live-preview-and-telerik/
一篇關于 Web Live Preview 的介紹性文章,它在 Visual Studio 2022 中提供了 ASP.NET Web 表單的運行時預覽。
這篇文章展示了如何啟用和使用 Web Live Preview,以及它如何與第三方組件(如 Telerik 組件)集成。
C# 列表模式匹配的例子 | haacked.com
https://haacked.com/archive/2022/11/22/csharp-list-pattern/
一篇展示 C#11 列表模式的代碼示例的文章。
.NET 7 刪除了不安全的 XmlSecureResolver
https://www.infoq.com/news/2022/11/XmlSecureResolver/
關于 XmlSecureResolver 在.NET 7 中被刪除的文章。
XmlSecureResolver 被推薦用來避免引用外部資源引起的 XXE,但它是基于代碼訪問安全(CAS)實現的,但由于.NET Core 沒有 CAS,不再受限制,所以在.NET 7 中被刪除。在.NET 7 中,它被廢棄了。雖然該類型仍然存在,但在構建時打印了一個警告,在運行時引用該類型時引發了一個異常。
建議限制外部資源的行動是使用 XmlResolver.ThrowingResolver 而不是 XmlSecureResolver。
.NET 7 的顛覆性變化:XmlSecureResolver 已經過時了 - .NET | Microsoft 學習[1]
在 ASP.NET Core Razor Pages 中實現 IAsyncPageFilter - Qiita
https://qiita.com/gushwell/items/bcf39aaf708b9a483cf5
關于如何在 ASP.NET Core Razor Pages 中實現頁面過濾的文章。
我想用 Azure AD 登錄并調用 Blazor WASM -> ASP.NET Core WebAPI -> MS Graph API
https://zenn.dev/okazuki/articles/auth-blazorwasm-aspnetcore-obo
文章介紹了如何從登錄 Azure AD 的 Blazor WebAssembly 應用程序中用 ASP.NET Core Web API 調用微軟圖形 API。
如何使用和構建一個流程(On-Behalf-Of flow),其中服務器應用程序調用 Graph API 而不是直接從客戶端調用。
在 OptionsBuilder 中使用范圍服務的危險和問題
https://andrewlock.net/the-dangers-and-gotchas-of-using-scoped-services-when-configuring-options-with-options-builder/
關于在使用 OptionsBuilder 構建配置時使用范圍服務的危險和陷阱的文章。
.NET 7 為 Kubernetes 增加了積極的垃圾收集功能
https://www.infoq.com/news/2022/11/GCCollectionMode-Aggressive/
關于.NET 7 中引入的GCCollectionMode.Aggressive
的文章。
"Aggressive "是一種模式,在用 "GC.Collect "執行 GC 時,盡可能多地釋放內存。這對于諸如容器上的工作者有很長的空閑時間,并且在等待時使用很少的內存的情況很有用,在這種情況下,你不想完全關閉,但想在等待時保持低的資源使用率。
[API 建議]:讓應用程序的作者告訴我們要空閑。
用 GitHub 動作構建和發布 Visual Studio 擴展程序
https://blog.elmah.io/build-and-publish-visual-studio-extensions-with-github-actions/
關于如何使用 GitHub Actions 構建和發布 Visual Studio 擴展(生成 VSIX 包)的文章。
在 Android 上運行 ASP.NET Core - Qiita
https://qiita.com/karuakun/items/c8439d0aadb2e798cf08
關于在 Android 上使用 Termux、運行 Ubuntu、安裝.NET SDK 和運行 ASP.NET Core 應用程序的文章。
.NET 中的靜態安全代碼檢查(Semgrep 版)
https://zenn.dev/masakura/articles/b84642b5bd680f
關于如何使用開源靜態安全代碼檢查工具 Semgrep 來檢查 C#代碼的文章。
如何用 MagicOnion 發送和接收大型復雜數據對象 - Qiita
https://qiita.com/mxProject/items/838ef3e5e2856c66a29c
關于如何使用 MagicOnion 的流媒體發送和接收大型數據對象的文章。
令人困惑的.NET 反編譯器:CallVirt OpCode
https://washi.dev/blog/posts/confusing-decompilers-with-callvirt/
關于不同的類型如果在虛擬函數表中具有相同的索引,就可以在 IL 的 CallVirt 中調用,而反編譯器不能很好地處理的文章。
Lambda 冷啟動 - .NET 7 Native AOT vs .NET 6 Managed Runtime | 沒有教條的博客
https://nodogmablog.bryanhogan.net/2022/11/lambda-cold-starts-net-7-native-aot-vs-net-6-managed-runtime/
文章比較了 AWS Lambda 中.NET 7 Native AOT 和.NET 6 運行時的冷啟動時間。
解析 "nettrace "事件流(不僅僅是)。
https://chnasarre.medium.com/parsing-the-nettrace-stream-of-not-only-events-8b95c7f82ec4
關于.NET 診斷協議的 "nettrace "流格式以及如何解析它的文章。
dotNETConf/2022/MainEvent/echnical at main - dotnet-presentations/dotNETConf - GitHub
https://github.com/dotnet-presentations/dotNETConf/tree/main/2022/MainEvent/Technical
.NET 會議 2022 年的幻燈片集。
從桌面瀏覽器或播放器中攔截聲音數據,并以類似 Spearna 的方式顯示出來 - Qiita
https://qiita.com/osamus/items/5093cefe20e8f817bbef
一篇文章總結了使用一個名為 BASS 的音頻處理庫實現類似 Spearna 的可視化器的關鍵點。
[C#]我想嘗試使用 MemoryPack 7 - 一些樣例
https://spacekey.dev/memorypack-7
關于實現一個應用程序的文章,該程序使用 MemoryPack 在 ASP.NET Core API 服務器和使用 Nuxt 的 Web 前端之間進行通信處理。
在.NET 8 新的使用 FOH 的集合類
https://steven-giesel.com/blogPost/34e0fd95-0b3f-40f2-ba2a-36d1d4eb5601
關于將在.NET 8 中引入的 FOH 的集合類的文章。
它介紹了 FOH 的集合類與現有的IReadOnlyList<T>
和 Immutable 集合之間的區別,性能等。
從你的 Visual Studio 安裝中刪除不支持的組件 - Visual Studio 博客
https://devblogs.microsoft.com/visualstudio/removing-out-of-support-components-from-your-visual-studio-installations/
描述從 Visual Studio 2022 17.4 安裝中移除不支持的組件的能力的文章。
新的安裝程序允許你一次性刪除 Visual Studio 安裝中不支持的組件,文章解釋了如何做到這一點。
如果安裝程序較新,這個刪除功能可以對 Visual Studio 2022 的所有版本進行,甚至 Visual Studio 2019 和 2017 環境也可以通過安裝 2022 安裝程序來支持。
開源庫、資源庫、工具
MichalStrehovsky/PublishAotCompressed
https://github.com/MichalStrehovsky/PublishAotCompressed
https://twitter.com/MStrehovsky/status/1595941448326602752
MSBuild 的一個擴展包,在用 Native AOT 發布時,用 UPX 壓縮可執行文件。

dhq-boiler/boilersE2E: 支持你的 E2E 測試
https://github.com/dhq-boiler/boilersE2E
一個用于 Windows 桌面應用程序的 E2E 測試的輔助程序庫,包括 Windows 應用程序驅動程序的啟動和關閉,帶有超時的元素搜索等。
[C#]為.NET 桌面應用程序實現了一個 E2E 測試的庫--Qiita[2]
kalk
https://kalk.dev/
一個為開發者提供的命令行計算器,可以進行各種計算、轉換和硬件內聯的計算。
ForNeVeR/AvaloniaRider: JetBrains Rider 插件用于 Avalonia 開發
https://github.com/ForNeVeR/AvaloniaRider/
https://twitter.com/fvnever/status/1596592659581345793?s=12
用 Rider 支持 Avalonia 開發的插件。提供了預覽和模板。

lowleveldesign/windbg-ext-template: 一個用于創建管理的 WinDbg 擴展的模板
https://github.com/lowleveldesign/windbg-ext-template
https://twitter.com/lowleveldesign/status/1596164757353922560?s=12
用 WinDbg 托管.NET 在托管代碼中實現擴展函數的模板。
網站、文件等
Home | endoflife.date
https://endoflife.date/
一個匯編各種框架和產品的壽命終止日期的網站。
推文
https://twitter.com/dotnetfdn/status/1595427955076784133?s=12&t=EDTXeykhwoV--mTr9sPPxw
用于 ESP32-C3 的.NET nanoFramework 固件鏡像已經發布,它說.NET 在 RISC-V 上運行。

Alexandre Mutel: "NativeAOT 的一個超級酷的功能與...." - Mastodon
https://mastodon.social/@xoofx/109423020409800983
.NET 7 的 NativeAOT 的一個超級酷的功能是 "直接調用 PInvoke",或者是鏈接靜態庫https://github.com/dotnet/runtime/blob/main/src/coreclr/nativeaot/docs/interop.md,直接調用函數的能力。在 NuGet 中沒有內置的支持來分發這些東西(例如運行時文件夾),但可以很容易地發布一個包,提供動態庫,但也可以提供對靜態鏈接庫的支持,并通過 MSBuild 目標自動注入它。我喜歡這個功能! 😎
.NET 7 的 NativeAOT 談到了.NET 7 支持直接的 P/Invoke 調用和靜態庫鏈接的討論。
runtime/interop.md at main · dotnet/runtime · GitHub[3]
版權聲明
國內板塊由 InCerry 進行整理 : https://github.com/InCerryGit/WeekRef.NET/blob/master/input_zh-CN/2022/2022-11-30.md
其余內容來自 Myuki WeekRef,由 InCerry 翻譯(已獲得授權) : https://github.com/mayuki/WeekRef.NET/blob/master/input/2022/2022-11-30.md
由于筆者沒有那么多時間對國內的一些文章進行整理,歡迎大家為《.NET 周報-國內文章》板塊進行貢獻,需要推廣自己的文章或者框架、開源項目可以下方的項目地址提交 Issue 或者在我的微信公眾號私信。
格式如下:
10~50 字左右的標題
對應文章或項目網址訪問鏈接
200 字以內的簡介,如果太長會影響閱讀體驗
https://github.com/InCerryGit/.NET-Weekly
參考資料
[1]
.NET 7的顛覆性變化:XmlSecureResolver已經過時了 - .NET | Microsoft 學習: https://learn.microsoft.com/ja-jp/dotnet/core/compatibility/xml/7.0/xmlsecureresolver-obsolete
[2][C#]為.NET桌面應用程序實現了一個E2E測試的庫--Qiita: https://qiita.com/dhq_boiler/items/0a8e1352abd161be9a3c
[3]runtime/interop.md at main · dotnet/runtime · GitHub: https://github.com/dotnet/runtime/blob/main/src/coreclr/nativeaot/docs/interop.md