.NET周报【12月第1期 2022-12-08】

发布时间 2023-03-22 19:06:47作者: InCerry

国内文章

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等项目。

image-20221211171044840


在这里,我们要向大家介绍的是".NET Conf 2022 "的视频,以及一张关于该内容的笔记思维导图,目前还是日文版。

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

image-20221210144923052


Xamarin.Forms的MessageCentre已被废弃,因此建议使用.NET Community Toolkit的WeekReferenceMessenger。

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

image-20221210145036075


讨论C#语言设计和工作组会议记录的可用性。

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

image-20221210145131274

深入挖掘

[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