.NET周报11月第4期 2022-11-30

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET周报11月第4期 2022-11-30相关的知识,希望对你有一定的参考价值。

国内文章

.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的成绩取得了第一名。

image-20221130223058274

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#中的机器学习代码完成。

image-20221130205657190

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。其他错误也得到了修复,在为正式发布做准备。

image-20221130205823618

文章、幻灯片

.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 压缩可执行文件。

image-20221130212147328

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 开发的插件。提供了预览和模板。

image-20221130212427346

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 上运行。

image-20221130212931756

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

以上是关于.NET周报11月第4期 2022-11-30的主要内容,如果未能解决你的问题,请参考以下文章

.NET周报 4月第3期 2023-04-15

.NET周报11月第1期 2022-11-07

.NET周报10月第1期 2022-10-11

.NET周报 2月第2期 2023-02-11

.NET周报 4月第2期 2023-04-08

.NET周报 5月第4期 2023-05-27