.NET周报【12月第2期 2022-12-15】

时间:2022-12-19 12:11:21

国内文章

九哥聊Kestrel网络编程第一章:开发一个Redis服务器

https://mp.weixin.qq.com/s/HJYnBE-7wbvkAYHxQaq3eQ

我和拥有多个.NET 千星开源项目作者九哥一拍即合,为了让更多的人了解 Kestrel,计划写一系列的文章来介绍它;本文是九哥发布的第一篇,通过 Kestrel 实现一个 Redis 的伪服务器,带大家了解 Kestrel 除了承载 HTTP 协议,还有其它更多的可能性,DotNetty 能做到的,Kestrel 同样也可以。

用最少的代码打造一个Mini版的gRPC框架

https://www.cnblogs.com/artech/p/16950268.html

在《用最少的代码模拟gRPC四种消息交换模式》中,我使用很简单的代码模拟了gRPC四种消息交换模式(Unary、Client Streaming、Server Streaming和Duplex Streaming),现在我们更近一步,试着使用极简的方式打造一个gRPC框架(github地址)。这个gRPC是对ASP.NET Core gRPC实现原理的模拟,并不是想重新造一个*。

玩好.NET高级调试,你也要会写点汇编

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

.NET 高级调试要想玩的好,看懂汇编是基本功,但看懂汇编和能写点汇编又完全是两回事,所以有时候看的多,总手痒痒想写一点,在 Windows 平台上搭建汇编环境不是那么容易,大多还是用微软的 MASM + DosBox 搭一个 8086 的环境,这玩意距今快 50 年了,今天为大家介绍介绍。

为什么推荐Kestrel作为网络开发框架

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

网络框架千千万万,在dotnet平台,我们可以直接手撸Socket,也可以基于dotnetty来开发,或者选择某些第三方类似于dotnetty的网络库,为何我要推荐Kestrel呢?

天坑,这样一个lambda随机取数据也有Bug

https://www.cnblogs.com/rupeng/p/16961982.html

前几天,一位网友跟我说他编写的一段很简单的代码遇到了奇怪的Bug,他要达到的效果是从一个List中随机取出来一条数据,代码很简单但是有BUG,带大家一起了解下。

.NET性能优化-ArrayPool同时复用数组和对象

https://www.cnblogs.com/InCerry/p/use-arraypool-with-naver-clear-array.html

大佬您好,之前读了您的文章受益匪浅,我们有一个项目经常占用 7-8GB 的内存,使用了您推荐的ArrayPool以后降低到 4GB 左右,我还想着能不能继续优化,于是 dump 看了一下,发现是ArrayPool对应的一个数组有几万个对象,这个类有 100 多个属性。我想问有没有方法能复用这些对象?感谢!

推荐一个使用 .NET 6 开发的开源媒体系统

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

Jellyfin 是一个使用.NET6编写的免费的媒体系统,它可以让您更好的管理媒体,包括电影,音乐,图书,照片等,它是 Emby 和 Plex 的替代方案,在 Github 开源并拥有18.6k 的 Star。

dotnet-exec 让 C# 程序更简单

https://mp.weixin.qq.com/s/Agk3i-YLqNQfcjG4Vc-cIQ

dotnet-exec是一个可以执行 C# 程序而不需要项目文件的命令行工具,并且你可以指定自定义的入口方法不仅仅是Main方法。

C# 11 中的新增功能

https://mp.weixin.qq.com/s/Ga-jBE8iih7KtQVjefwlnw

我们很高兴地宣布 C# 11 已经发布!与往常一样,C# 开辟了一些全新的领域,同时推进了过去版本中一直在运行的几个主题。我们的文档页面上的 C# 11 的新增功能下有许多功能和详细信息,这些内容都得到了很好的介绍。

开发高性能ASP.NET应用

https://mp.weixin.qq.com/s/E-7y8hV006dhx7TBMrM5Gg

本文是“.NET Conf China 2022”上我的一个分享,这里更细化的分享出来。分享分为四个部分:1. 制定目标、2.设计应用、3. 正确测试、4.性能优化。

图像处理技术OpencvSharp入门

https://mp.weixin.qq.com/s/TqltBB4E-Z6w48z1K-Y6tw

在.NET下常用OpenCV进行图像处理工作,常用的.NET下的OpenCV库有Emgu CV和OpenCVSharp。今天我们就来和大家介绍一些OpenCvSharp。

工程坐标转换方法 C# 代码实现

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

这里针对GPS接收的WGS84椭球的经纬度转换为地方坐标系的问题,利用C#,对工程坐标转换方法和步骤做出详细的解答。不基于任何类库和函数库,也未使用矩阵库,可以便利的将代码移植到任何语言。

主题

.NET 7 中的网络库改进 - .NET Blog

https://devblogs.microsoft.com/dotnet/dotnet-7-networking-improvements/

介绍.NET 7中与网络有关的改进的文章。该文章详细介绍了以下项目:

  • 改进对连接执行失败的处理
  • 为HttpHeaders读取线程安全
  • HTTP/2和HTTP/3协议错误检测
  • HTTP/3
  • QUIC
    • .NET中的的QUIC。
    • API(QuicListener, QuicConnection, QuicStream)。
  • 安全问题
    • 协商API(Windows认证)
    • 证书验证选项
    • 性能
  • WebSocket
    • WebSockets握手响应的细节
    • 外部HTTP客户端供应
    • HTTP/2上的WebSockets

试用Visual Studio 2022版17.5预览版2 - Visual Studio博客

https://devblogs.microsoft.com/visualstudio/try-out-visual-studio-2022-17-5-preview-2/

Visual Studio 2022版17.5预览版已经发布。

  • 一体化搜索的改进
  • 编辑时的粘性滚动
  • 在调试器文本可视化器中对URL编码的字符串、Base64、JWT和其他字符串进行解码
  • 快速补充
  • 改进的重新认证工作流程
  • 将ASP.NET Core应用程序发布到Azure容器应用程序中
  • ASP.NET核心项目应用程序输出到集成终端
  • 各种C++改进
  • 使用.config文件定制安装布局
  • 能够在退出时更新

.NET 2022年12月更新 - .NET 7.0.1, .NET 6.0.12, .NET Core 3.1.32 - .NET博客

https://devblogs.microsoft.com/dotnet/december-2022-updates/

.NET 7.0.1、.NET 6.0.12和.NET Core 3.1.32已被发布。

该版本包含一个安全补丁,它修复了一个远程代码执行漏洞,该漏洞允许通过打开精心制作的XPS文件来执行代码。

这也是.NET Core 3.1的最后一个版本,它将在2022年12月13日不被支持。

.NET框架2022年12月安全和质量滚动更新 - .NET博客

https://devblogs.microsoft.com/dotnet/dotnet-framework-december-2022-security-and-quality-rollup-updates/

2022年12月发布的.NET框架安全和累积滚动更新。

该版本包含一个安全补丁,并修复了一个远程代码执行漏洞,该漏洞允许通过打开精心制作的XPS文件执行代码。

发布IronPython 3.4.0 - IronLanguages/ironpython3

https://github.com/IronLanguages/ironpython3/releases/tag/v3.4.0

IronPython 3.4.0已经发布。

该版本支持Python 3.4语法和标准库。 它还支持一些较新版本的语法,等等。

运行时目标是.NET框架4.6.2、.NET Core 3.1和.NET 6。

它也以.NET工具的形式发布,可以通过dotnet tool install -g IronPython.Console来安装和运行。

-IronPython 3.4.0终于正式发布了- 与.NET集成的Python语言的开源实现/从'Python 2'过渡到'Python 3' - Windows森林

多语言笔记本 - 2022年12月发布 - .NET博客

https://devblogs.microsoft.com/dotnet/polyglot-notebooks-december-2022-release/

2022年12月发布的Polyglot Notebooks(以前的.NET Interactive)。

  • 升级到.NET 7
  • 支持C# 11和F# 7
  • SQL和KQL的改进与新的动态内核选择器

2.2.2版 - mysql-net/MySqlConnector

https://github.com/mysql-net/MySqlConnector/releases/tag/2.2.2

Async MySqlConnector 2.2.2已经发布。

该版本修复了TLS连接初始化和连接异常时对象销毁过程中的内存泄漏。

Visual Studio Code 2022年11月

https://code.visualstudio.com/updates/v1_74

Visual Studio Code 1.74(1.74.1)已经发布。

  • 改善无障碍设施。
  • 定制资源管理器的自动显示。
  • 笔记本和差异视图中的音频提示
  • 合并编辑器中的撤销/重做
  • 不安全的储存库管理
  • 通过JavaScriptconsole.profile收集
  • 从返回到定义 (JavaScript/TypeScript)
  • 远程隧道
  • 在Jupyter笔记本中进行 "只是我的代码 "的调试
  • 开发容器中的GPU支持

此外,在1.74版发布后,1.74.1版也已发布,并对各种错误进行了修复。

用项目迁移从ASP.NET迁移到ASP.NET Core第五部分 - .NET博客

https://devblogs.microsoft.com/dotnet/migrating-from-asp-net-to-asp-net-core-part-5/

一系列关于从ASP.NET迁移到ASP.NET Core的文章,其中System.Web.Adapter 1.0现已发布。

这篇文章介绍了迁移的Visual Studio扩展和System.Web.Adapter的更新。

Visual Studio中用于ASP.NET Core项目的开发隧道 - Visual Studio博客

https://devblogs.microsoft.com/visualstudio/dev-tunnels-in-visual-studio-for-asp-net-core-projects/

一篇关于Dev tunnels(开发隧道)的介绍性文章,这是Visual Studio中ASP.NET Core项目可用的预览功能。

Dev tunnels是一种端口转发功能,允许从外部来源(如ngrok)访问本地环境。

文章介绍了最新的更新和如何使用该功能,持久性和临时性隧道的区别,工具窗口和环境变量支持。

文章、幻灯片等

未使用通用类型参数的TypeLoadException问题 | UFCPP的博客

https://ufcpp.net/blog/2022/12/unused-generic-type-parameter/

关于运行时行为问题的文章,涉及结构体的泛型和包含它们的结构。

如果struct A<T> {}被定义为struct B { A<B> Value; },我们谈论的是防御性地抛出一个异常,尽管它不是递归。

在实践中尝试.NET Lambda的Native AOT | DevelopersIO

https://dev.classmethod.jp/articles/net-lambda-native-aot/

文章中对AWS Lambda支持的.NET应用的Native AOT进行了实际测试。

在文章中,除了使其发挥作用的程序外,还测量并提到了实际的启动时间。 (本地AOT较慢,等等。)

我用.NET MAUI做了一个跨平台(计划中)的备忘录应用。

https://zenn.dev/tomori_k/articles/966f34daea405a

关于在.NET MAUI中实现一个备忘录应用程序的文章。

使用NuGet 6.4中的*软件包管理改进多个项目间的版本控制 - Shibayan Miscellaneous

https://blog.shibayan.jp/entry/20221211/1670748155

关于在NuGet 6.4中使用*包管理来集中管理项目的包版本的文章。

文章还提到了转换器的存在和关于Dependabot的说明。

Blazor WebAssembly - 通过确保删除没有从任何地方引用的代码来减少.dll大小 - Qiita

https://qiita.com/jsakamoto/items/91c86a0f34de6e6d77b9

关于如何通过在Blazor WebAssembly中进行汇编修剪来减少文件大小的文章。

[Help wanted] 当用Playwright进行E2E测试Blazor服务器时,Playwright的第一个动作太快了,测试失败 - Qiita

https://qiita.com/jsakamoto/items/3d749a9ba4f8523b5291

关于用Playwright测试Blazor服务器时的一个问题,即在事件处理程序连接到预渲染的内容之前,Playwright以读完的方式运行。

Visual Studio生产力的新内容 - Visual Studio博客

https://devblogs.microsoft.com/visualstudio/whats-new-in-visual-studio-productivity/

关于Visual Studio生产力的新功能的文章。

  • 输出窗口的时间戳
  • 选择匹配
  • 用鼠标滚轮进行水平滚动
  • 使用声音提示跟踪代码
  • 突出显示行号

扩展方法没有看到隐式类型转换 | UFCPP的博客

https://ufcpp.net/blog/2022/12/extension-resolution/

一篇解释扩展方法不能用于隐式类型转换的文章。

NET 7中新的5个MVC功能

https://andrewlock.net/5-new-mvc-features-in-dotnet-7/

文章介绍了.NET 7中ASP.NET Core MVC的5个新特性。

  • Primitive binding IParseable, TryParse.
  • MVC控制器自动猜测[FromServices]为依赖注入
  • 使用nullable注解来猜测它是否是强制性的
  • 支持MVC中的 IResult
  • 定制的元数据提供者在响应中提供更好的错误名称

使用Keycloak作为Blazor WebAssembly(WASM)应用程序的身份提供者

https://dev.to/nikiforovall/use-keycloak-as-identity-provider-from-blazor-webassembly-wasm-applications-3an6

关于如何使用Keycloak作为Blazor WebAssembly的IdP的文章。

VS2022新的DevTunnel(开发隧道)功能,便于从Azure访问本地调试环境 - Qiita

https://qiita.com/seuharuka/items/6f77983a179042b48e59

一篇介绍和使用Dev tunnels功能的文章,这是Visual Studio 2022的一个预览功能。

C#11与.NET 6.0和.NET Framework 4.8的兼容性 - Qiita

https://qiita.com/skitoy4321/items/77aff330a4ce63dd977c

文章总结了.NET 7中支持的C# 11功能在.NET 6和.NET Framework 4.8中可以使用(但不一定支持)的程度。

在GitHub行动上构建MAUI应用程序

https://zenn.dev/proudust/articles/2022-12-06-build-maui-on-gh-actions

关于GitHub Actions上支持状态和构建.NET MAUI应用程序步骤的文章。

让我们用Blazor创建一个表单,允许你动态地添加更多的输入字段。

https://zenn.dev/okazuki/articles/dynamic-items-form-in-blazor

一篇关于如何使用Blazor动态地增加和减少表单中的项目数量,以及进行验证的文章。

使用CommunityToolkit.Maui.MediaElement的背景音频流(预览),适用于Android和iOS

https://dev.to/mephisztoe/background-audio-streaming-with-communitytoolkitmauimediaelement-preview-for-android-and-ios-340p

关于如何在Android和iOS上使用CommunityToolkit.Maui.MediaElement(预览版)进行后台流媒体音频的文章。

[调查] 在用MSBuild构建后立即运行dotnet测试,将重新构建 - Qiita

https://qiita.com/lx-sasabo/items/557ff31eee36429d229e

关于调查在用MSBuild构建后运行dotnet测试可能导致构建再次被执行的情况的文章。

该文章指出,结果因是否使用Microsoft.NET.Build.Extensions而发生变化。

用Quartz.NET调度jOB - Code Maze

https://code-maze.com/schedule-jobs-with-quartz-net/

关于如何用Quartz.NET调度Job并在后台处理的文章。

介绍Wolverine,用于有效的服务器端.NET开发

https://jeremydmiller.com/2022/12/12/introducing-wolverine-for-effective-server-side-net-development/

介绍使用Wolverine(一种调解器/消息总线)进行的服务器开发。

将Blazor WebAssembly(由ASP.NET Core托管)部署到Fly.io,该网站可免费使用(使用EF Core+PostgreSQL) - Qiita

https://qiita.com/nobu17/items/824c39493f7b12e94f7b

一篇关于将Blazor WebAssembly部署到fly.io并在服务器端用EF Core连接PostgreSQL等的文章。

用Figma制作的.NET MAUI UI组件 - Qiita

https://qiita.com/MAUIHighSchool/items/232e1bb3d65080f2c548

从Figma的设计到创建一个UI组件,都需要使用.NET MAUI代码。

在.NET 7中,将ASP.NET Core Identity中的2FA's Token Provider长度减少到4位而不是6位。

https://dev.to/mohammedahmed/reduce-the-2fas-token-provider-length-in-aspnet-core-identity-to-4-digits-instead-of-6-digits-in-net-7-6fh

关于如何通过在ASP.NET Core Identity中定制2FA的令牌提供者,尝试从6位数改为4位数的文章。

CommunityToolkit.Mvvm V8介绍 - Qiita

https://qiita.com/kk-river/items/d974b02f6c4010433a9e

CommunityToolkit.Mvvm 8.0.0的一篇介绍性文章。

它介绍了属性、命令代码生成、信使等。

在.NET 8中新增ArgumentException和ArgumentOutOfRangeException帮助器

https://steven-giesel.com/blogPost/f4bc6fcc-5691-4f72-b9bb-75aeeb59230a

文章介绍了正在考虑在.NET 8中加入ArgumentExceptionArgumentOutOfRangeException的辅助方法。

是GC的性能倒退还是其他原因?

https://maoni0.medium.com/is-the-regression-in-gc-or-something-else-38f10018dd21

关于GC中的倒退的文章。

它解释说,有些性能退步看起来像GC性能退步,但其实不是,例如当你升级.NET版本时,你可以通过使用旧的GC来检查它是否确实存在性能退步。

用ML.NET 2.0在C#中进行文本分类

https://medium.com/accessibleai/text-classification-in-c-with-ml-net-2-0-bc979dfd8ca9

关于如何使用ML.NET 2.0进行文本分类的文章。

.NET MAUI x Stripe C# 跨平台轻松信用卡支付 - Qiita

https://qiita.com/MAUIHighSchool/items/393ba93e2eade7f8c9b9

关于如何通过在.NET MAUI中嵌入Stripe SDK在您的应用程序中实现信用卡支付的文章。

C# 11中的新功能(用于编码) - Qiita

https://qiita.com/sh1ch/items/0b6add41584b5ba7f698

用代码介绍C# 11的新特性的文章。

用.NET和Swagger管理你的API的多个版本

https://medium.com/@saeedeldah/managing-multiple-versions-of-your-api-with-net and-swagger-47b4143e8bf5

关于如何使用API Explorer将ASP.NET Core Web API版本管理与Swagger结合起来的文章。

从PHP和Go中调用用C#编写的库 - Qiita

https://qiita.com/Gaku_Ishii/items/ad4abb1e0073519877d7

文章展示了如何用Native AOT将.NET代码构建为一个本地库,并从PHP和Go中调用它。

图书馆、资源库、工具等

ugai/narabemi: 快速并排的视频比较工具

https://github.com/ugai/narabemi

一个用于并排视频比较的工具。

hadashiA/VYaml: 用于C#的超快、低内存占用的YAML库,专注于.NET和Unity。

https://github.com/hadashiA/VYaml

一个高性能、节省内存的YAML库,针对.NET Standard 2.1的过渡。

davidfowl/SmartLoadBalancer: 没有粘性会话的粘性会话

https://github.com/davidfowl/SmartLoadBalancer/

为类似SignalR的东西实验性地实现了没有粘性的会话。它的工作原理是反复尝试转发请求,直到一个成功的SignalR服务器被YARP拉到。

.NET周报【12月第2期 2022-12-15】

网站、文件等

推文

Newtonsoft.Json 13.0.1有一个小的退步,没有影响到大多数人,这被误认为是不能使用的(就像对13.0.2一样,因为它打了补丁但不能使用),并被标记为脆弱版本。

https://twitter.com/jamesnk/status/1600844999783903233?s=12

.NET周报【12月第2期 2022-12-15】

深入研究

RMS v3.0 Planning · Issue #258 · microsoft/Microsoft.IO.RecyclableMemoryStream

https://github.com/microsoft/Microsoft.IO.RecyclableMemoryStream/issues/258

RecyclableMemoryStream 3.0版本的规划

.NET周报【12月第2期 2022-12-15】

版权声明

由于笔者没有那么多时间对国内的一些文章进行整理,欢迎大家为《.NET周报-国内文章》板块进行贡献,需要推广自己的文章或者框架、开源项目可以下方的项目地址提交Issue或者在我的微信公众号私信。

格式如下:

  • 10~50字左右的标题
  • 对应文章或项目网址访问链接
  • 200字以内的简介,如果太长会影响阅读体验

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

.NET性能优化交流群

相信大家在开发中经常会遇到一些性能问题,苦于没有有效的工具去发现性能瓶颈,或者是发现瓶颈以后不知道该如何优化。之前一直有读者朋友询问有没有技术交流群,但是由于各种原因一直都没创建,现在很高兴的在这里宣布,我创建了一个专门交流.NET性能优化经验的群组,主题包括但不限于:

  • 如何找到.NET性能瓶颈,如使用APM、dotnet tools等工具
  • .NET框架底层原理的实现,如垃圾回收器、JIT等等
  • 如何编写高性能的.NET代码,哪些地方存在性能陷阱

希望能有更多志同道合朋友加入,分享一些工作中遇到的.NET性能问题和宝贵的性能分析优化经验。由于已经达到200人,可以加我微信,我拉你进群: ls1075