.NET周报【12月第1期 2022-12-08】
国内文章
CAP 7.0 版本发布通告 - 支持延迟消息,性能炸了?
https://www.cnblogs.com/savorboard/p/cap-7-0.html)
今天,我们很高兴宣布 CAP 发布 7.0 版本正式版,我们在这个版本中带来了大批新特性以及对性能的优化和改进。
使用.NET7和C#11打造最快的序列化程序-以MemoryPack为例
本文是一篇不可多得的好文,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#活动
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添加的Order
和OrderDescending
方法。
灾难性的回溯:正则表达式如何能导致ReDoS漏洞?
关于正则表达式回溯导致的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博客
文章提供了关于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)中的新功能与交互式实例
文章展示了使用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--世界上最快的二进制序列化器--演讲稿
幻灯片展示了如何在实现名为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
ASP.NET的一个框架,用于实现所谓的Request-Endpoint-Response(REPR)模式,取代了Minimal API和MVC。
- 使用.NET 6 Minimal API中的JWT Bearer认证来确保端点的安全。FastEndpoints](https://ilgaz.medium.com/securing-endpoints-with-jwt-bearer-authentication-in-net-6-minimal-api-using-fastendpoints-51cbb5d633b9)
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等项目。
在这里,我们要向大家介绍的是".NET Conf 2022 "的视频,以及一张关于该内容的笔记思维导图,目前还是日文版。
https://twitter.com/jsakamoto/status/1597555960951631872?s=12&t=yjMpM4TnEEFCnbK7AUbr1A
Xamarin.Forms的MessageCentre已被废弃,因此建议使用.NET Community Toolkit的WeekReferenceMessenger。
https://twitter.com/JamesMontemagno/status/1599101553813880839
讨论C#语言设计和工作组会议记录的可用性。
https://twitter.com/davidfowl/status/1600001951970000896
深入挖掘
[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,即搜索后稍微滚动一下可能就看不到第一个结果了。
版权声明
- 国内板块由 InCerry 进行整理 : https://github.com/InCerryGit/WeekRef.NET/blob/master/input_zh-CN/2022/2022-12-08.md
- 其余内容来自 Myuki WeekRef,由InCerry翻译(已获得授权) : https://github.com/mayuki/WeekRef.NET/blob/master/input/2022/2022-12-08.md
由于笔者没有那么多时间对国内的一些文章进行整理,欢迎大家为《.NET周报-国内文章》板块进行贡献,需要推广自己的文章或者框架、开源项目可以下方的项目地址提交Issue或者在我的微信公众号私信。
格式如下:
- 10~50字左右的标题
- 对应文章或项目网址访问链接
- 200字以内的简介,如果太长会影响阅读体验
https://github.com/InCerryGit/.NET-Weekly
.NET性能优化交流群
相信大家在开发中经常会遇到一些性能问题,苦于没有有效的工具去发现性能瓶颈,或者是发现瓶颈以后不知道该如何优化。之前一直有读者朋友询问有没有技术交流群,但是由于各种原因一直都没创建,现在很高兴的在这里宣布,我创建了一个专门交流.NET性能优化经验的群组,主题包括但不限于:
- 如何找到.NET性能瓶颈,如使用APM、dotnet tools等工具
- .NET框架底层原理的实现,如垃圾回收器、JIT等等
- 如何编写高性能的.NET代码,哪些地方存在性能陷阱
希望能有更多志同道合朋友加入,分享一些工作中遇到的.NET性能问题和宝贵的性能分析优化经验。由于已经达到200人,可以加我微信,我拉你进群: ls1075