.NET周报 【3月第3期 2023-03-19】

2023-06-28,

国内文章

记一次 .NET某汽车零件采集系统 卡死分析

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

前段时间有位朋友在微信上找到我,说他的程序会出现一些偶发卡死的情况,让我帮忙看下是怎么回事,刚好朋友也抓到了dump,就让朋友把 dump 丢给我,接下来用 windbg 探究下到底咋回事。

.NET中委托性能的演变

https://www.cnblogs.com/InCerry/archive/2023/03/14/the-evolution-of-delegate-performance-in-net-c8f23572b8b1.html

.NET中的委托是一项重要功能,可以实现间接方法调用和函数式编程。本文介绍委托在以前的.NET中存在性能问题和.NET7.0 .NET8.0版本如何将这一问题彻底解决。

NET 8 预览版 2 亮点是Blazor

https://www.cnblogs.com/shanyou/archive/2023/03/15/17220483.html

.NET 团队在2023年3月14日发布了.NET 8预览版2,博客文章地址:https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-2/, 亮点是了对Blazor的一些改进。

为什么 C# 可能是最好的第一编程语言

https://www.cnblogs.com/shanyou/archive/2023/03/16/17221052.html

纵观神州大地,漫游中华互联网,我看到很多人关注为什么你应该开始学习JavaScript做前端,而对blazor这样的面向未来的框架有种莫名的瞧不起,或者为什么你应该学习Python作为你的第一门编程语言,恕不知有多少公司业务是用Python开发的,Python更多是粘合剂,作为胶水语言来使用。

我用C# 工作了 20多年,我也一直把它当作第一编程语言,几乎尝试了任何东西:桌面、物联网、移动、Web、云原生- 以及 C# 和 .NET 完美契合的所有地方,特别是当下Chatgpt 还有AI的辅助编程时代,你应该考虑从它开始你的开发人员之路。

学习 .NET高级调试 个人推荐的10本书

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

昨天训练营有朋友让我推荐学习 .NET高级调试 的参考书,这里整理了我个人推荐的 10 本书:这篇文章推荐了10本学习.NET高级调试的书籍,分别是:这篇文章推荐了10本学习.NET高级调试的书籍,分别是:

    .NET高级调试
    Windows 编程调试技术内幕
    软件调试 - 第二卷 (上下册)
    Windows 高级调试
    深入解析 Windows 操作系统
    .NET 和 Windows 应用程序调试
    C++ 反汇编与逆向分析技术揭秘
    .NET 内存管理宝典
    .NET Core 底层入门
    格蠹汇编

async 与 Thread 的错误结合

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

在 TAP 出现之前,我们可以通过 Thread 来完成一些线程操作,从而实现多线程和异步操作。在 TAP 出现之后,有时候为了更高精度的控制线程,我们还是会使用到 Thread 。文本讲介绍一种错误的使用方式,作为读者的一个参考。

.NET Core 使用 ImageSharp 生成图片

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

ImageSharp是对.NET Core平台扩展的一个图像处理方案,以往网上的案例多以生成文字及画出简单图形、验证码等方式进行探讨和实践。分享一下所在公司项目的实际应用案例,导出微信二维码图片,圆形头像等等。

Blazor 在 IoT 领域的前端实践 @.NET开发者日

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

这篇文章是关于Blazor在IoT领域的前端实践的主题分享。文章分为两个部分,第一部分介绍了为什么要在IoT项目中使用Blazor技术,Blazor给IoT带来了什么。第二部分以一个IoT项目举例,使用Blazor和MAUI技术的落地具体内容,最后还有在开发和调试过程中的经验分享。

入门MasaFramework 系列教程

https://mp.weixin.qq.com/s/3zn_64o-bLfEkJOByzu2VA

这篇文章是一篇关于MasaFramework的入门教程,主要介绍了MasaFramework的基本概念和项目结构。文章首先介绍了MasaFramework是一个基于.Net6.0的后端框架,可以被用于开发Web应用程序、WPF项目、控制台项目。接着,文章介绍了MasaFramework提供了很多功能的包,很强大,对于Dapr的支持非常好。然后,文章介绍了如何使用MasaFramework,包括安装MasaFramework项目模板和创建项目。最后,文章介绍了MasaFramework的项目结构,包括src/ApiGateways,src/Contracts,src/Services,src/Web四层,以及mfDemo.Shared,mfDemo.Server,mfDemo.WebAssembly三层项目架构。总的来说,这篇文章是一篇非常详细的MasaFramework入门教程,适合初学者。

.NET Task 揭秘(3)async 与 AsyncMethodBuilder

https://mp.weixin.qq.com/s/1AiEHVuk_FZF15_pth-FJQ

本文是 .NET Task 揭秘 系列博客的第三篇,主要介绍了 async 与 AsyncMethodBuilder。上文我们学习了 await 这个语法糖背后的实现,了解了 await 这个关键词是如何去等待 Task 的完成并获取 Task 执行结果。并且我们还实现了一个简单的 awaitable 类型,它可以让我们自定义 await 的行为。

AsyncMethodBuilder 是状态机的重要组成部分。如果在一个方法中使用了 await,那么这个方法就必须添加 async 修饰符。并且这个方法的返回类型通常是 Task 或者 其它 runtime 里定义的 awaitable 类型。

ASP.NET Core Web API 接口限流

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

这篇文章是一篇技术文章,主要讲述了如何在ASP.NET Core Web API中实现接口限流的功能。文章中提到了实现接口限流的需求,如何实现接口限流,以及如何使用jMeter进行压力测试。文章中提供了相关的代码和截图,可以帮助读者更好地理解文章的内容。

主题

【英文】宣布 .NET 8 预览版 2 - .NET 博客

https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-2/

.NET 8 Preview 2 已经发布。

此版本添加了扩展 System.ComponentModel.DataAnnotations 的属性,并支持反射中的函数指针。

【英文】EF Core 8 预览版 2:精简且熟悉 - .NET 博客

https://devblogs.microsoft.com/dotnet/announcing-ef8-preview-2/

Entity Framework Core 8 Preview 2 已经发布。

本文介绍了 SQLite 中的 JSON 列支持和此版本中提供的 SQL Server/Azure SQL 数据库中的 HierarchyId 支持。

【英文】.NET 8 Preview 2 中的 ASP.NET Core 更新 - .NET 博客

https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-8-preview-2/

.NET 8 Preview 8 中对 ASP.NET Core 的更新。

对 Blazor 的 QuickGrid 支持
改进了 Blazor WebAssembly 中 JIT (Jiterpreter) 的性能
检测多个 [FromBody] 的分析器
用于更有弹性集成的 ProblemDetails 的新 API
ObjectPool 上的IResettable 接口
改进的命名管道性能

【英文】Visual Studio 2022 v17.6 Preview 2 现已推出 - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/visual-studio-2022-v17-6-preview-2-is-now-available/

Visual Studio 2022 版本 17.6 Preview 2 已经发布。

提高你的生产力

Git 阶段并在构建期间提交
改进的合并对话框
断点组
C++ 仪器分析
WSL 上 .NET 的 Profiler Live Graphs
创建 C++ 成员函数
简化的游戏开发
虚幻引擎代码分析
Tim Jones 的 HLSL 工具扩展
.NET 移动开发
安卓清单编辑器
企业管理
从您的 Intranet 托管和部署 Visual Studio 布局
安装程序中可用产品的有限曝光

【英文】你好,语义内核!

https://devblogs.microsoft.com/semantic-kernel/hello-world/

语义内核发布。

语义内核是一个轻量级 SDK,用于将来自大型语言模型 (LLM)(例如 OpenAI 和 Azure OpenAI 服务)的 AI 提示整合到您的应用程序中。 现在支持 C#,Python 处于预览支持状态。

microsoft/semantic-kernel:将尖端的 LLM 技术快速轻松地集成到您的应用程序中

【英文】发布 v2.5.108 neuecc/MessagePack-CSharp

https://github.com/neuecc/MessagePack-CSharp/releases/tag/v2.5.108

MessagePack-CSharp v2.5.108 已经发布。

自 v2.4.59 以来的更改包括添加可为 null 的注释、放弃对 .NET 5 的支持、前滚生成器以及各种其他修复和改进。

发布 v2.5.94 neuecc/MessagePack-CSharp GitHub
发布 v2.5.103 neuecc/MessagePack-CSharp GitHub

【英文】Async/Await 在 C# 中的真正工作原理 - .NET 博客

https://devblogs.microsoft.com/dotnet/how-async-await-really-works/

一篇解释 C# 中 async/await 工作原理的文章。

它描述了从 APM 和基于事件的异步模式到基于任务、任务和 ValueTask 的流程,C# 中的编译时代码扩展,并详细解释了它的工作原理。

【英文】Release 发布v2.52.0 grpc/grpc-dotnet

https://github.com/grpc/grpc-dotnet/releases/tag/v2.52.0

grpc-dotnet (Grpc.Net) v2.52 已经发布。

此版本现在针对 .NET 6 的 dotnet-grpc 工具,并包括各种小错误修复和改进。

发布版本 v2.52.0-pre1 grpc/grpc-dotnet

【英文】发布 v1.2.5 microsoft/WindowsAppSDK

https://github.com/microsoft/WindowsAppSDK/releases/tag/v1.2.5

Windows App SDK 1.2.5 (1.2.230313.1) 发布。

此版本修复了 Composition 关闭期间的崩溃、动画即使在屏幕关闭时仍继续播放的问题,以及 WebView2 中鼠标和触摸输入失败的修复。

【英文】.NET 2023 年 3 月更新 – .NET 7.0.4、.NET 6.0.15 - .NET 博客

https://devblogs.microsoft.com/dotnet/march-2023-updates/

.NET 7.0.4 和.NET 6.0.15 已经发布。

此版本包含几个小错误修复和改进。

【英文】宣布 Polyglot Notebooks!Visual Studio Code 中的多语言笔记本 - .NET 博客

https://devblogs.microsoft.com/dotnet/announcing-polyglot-notebooks-harness-the-power-of-multilanguage-notebooks-in-visual-studio-code/

Polyglot Notebooks(以前称为 .NET Interactive Notebooks)现在作为 Visual Studio Code 的扩展在 Marketplace 上普遍可用。

文章、幻灯片等

【日文】关于.NET 8 Preview 2 中添加的输入值验证

https://zenn.dev/tomokusaba/articles/bb5cb32470ca8a

它介绍了 .NET 8 Preview 2 中添加的 System.ComponentModel.DataAnnotations 验证属性的功能。

【日文】关于 Blazor WebAssembly 中的输入值验证

https://zenn.dev/tomokusaba/articles/9fd92c1716ca30

如何在 Blazor WebAssembly 中实现输入验证。

【英文】WeAreDotnet 社区

https://medium.com/@tim.cadenbach/wearedotnet-d8ec96685c33

名为#WeAreDotnet 的社区门户。

WeAreDotnet(测试版)

【英文】EventStoreDb 入门(C#)

https://medium.com/@no1.melman10/getting-started-with-eventstoredb-c-13411ec08713

说明如何使用事件溯源数据库 EventStoreDB。

EventStoreDB 本身也在 .NET (C#) 中实现。

EventStore/EventStore:为事件溯源优化的流数据库

【英文】扩展 Visual Studio CodeLens 功能 - 第二部分

https://codingwithcalvin.net/extending-visual-studio-codelens-functionality-part-ii/

关于如何在 Visual Studio 中扩展 CodeLens 的系列教程。 本文介绍如何实现 CodeLens 回调。

【日文】经常被遗忘的文化相关问题 | UFCPP

https://ufcpp.net/blog/2023/3/string-order/

启用全球化不变模式时,处理字符串比较中的不变性和序数以及顺序中的性能等。

【日文】创建一个可以用XCopy部署的WinUI3最小工程

https://zenn.dev/nin_neko/articles/ecb16042f04c01

关于如何为 XCopy 部署创建一个最小的 WinUI 3 应用程序项目(一种通过复制文件而不安装来工作的形式)。

【日文】从 CESU-8 到 UTF-16 的转换 - Qiita

https://qiita.com/7shi/items/8eae6d909e1b82b35215

如何将 CESU-8(UTF-8 的变体)转换为 UTF-16。

【英文】Rider 2023.1 中的 Unity DOTS 支持 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2023/03/16/unity-dots-support-in-rider-2023-1/

引入 Rider 2023.1 中添加的 Unity DOTS 支持。

支持 DOTS 的模板和代码生成。

【英文】帮助我们研究 Visual Studio 17.6 预览版 2 中的新欢迎体验 - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/welcome-experience/

关于 Visual Studio 17.6 Preview 2 中引入的新欢迎页面。

引入欢迎页面,它取代了旧的启动窗口(您可以在其中选择现有解决方案、创建新项目等)并征求反馈。

【英文】C# - 使用 Novell Directory Ldap Nuget 包通过 ObjectSid 搜索 AD 条目

https://dev.to/hbolajraf/c-search-ad-entry-by-objectsid-using-novell-directory-ldap-nuget-package-28il

如何使用 Novell.Directory.Ldap.NETStandard 包根据 ObjectSid 搜索 Active Directory。

【英文】[ASP.NET Core] 尝试服务器发送的事件

https://dev.to/masanori_msl/aspnet-core-try-server-sent-events-5db2

如何在 ASP.NET Core 中实现服务器发送的事件。

【英文】使用 WPF 和 Dyte 构建视频通话应用程序

https://dyte.io/blog/building-video-calling-app-using-wpf-dyte/

如何实现使用 Dyte 进行视频通话的 WPF 应用程序,Dyte 是一种处理实时视频和视频会议的服务。

【日文】关于 .NET 中的控制台缓冲区和窗口 - Qiita

https://qiita.com/rougemeilland/items/10f4d94c9343fd8eb708

关于在 .NET 中处理控制台缓冲区和窗口。 它还涉及 Console.Clear 的行为。

【英文】实现可访问、可检查的 WPF 树视图 - Engineering@Microsoft

https://devblogs.microsoft.com/engineering-at-microsoft/implementing-an-accessible-checkable-wpf-tree-view/

对于由 Accessibility Insights 团队修改的 WPF 中带有复选框的树视图实现。

【英文】在 JetBrains Rider 中使用 Git

https://andrewlock.net/working-with-git-in-jetbrains-rider/

JetBrains Rider中Git的各种操作介绍。

【英文】静态接口成员、通用属性、自动默认结构 - 在 Rider 和 ReSharper 中使用 C# 11 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2023/03/14/static-interface-members-generic-attributes-auto-default-structs-using-csharp-11-in-rider-and-resharper/

在 JetBrains Rider 和 ReSharper 中引入了支持新功能的功能,例如接口中的静态抽象成员、通用属性和 C# 11 中结构的自动默认值。

【英文】改进拼写检查器 - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/improving-the-spell-checker/

在 Visual Studio 2022 17.6 Preview 2 中引入拼写检查改进。

它引入了改进的特定于编程语言的字典和排除字典的编码、更好的特殊情况检测以及拼写检查器的自定义。

【日文】获取特定文件夹下项目引用的库列表(.NET)-Qiita

https://qiita.com/karuakun/items/a6149a40d9c775a6665d

关于如何使用 PowerShell 获取从特定文件夹下的 .csproj 引用的库列表。

【日文】尝试从C#-Qiita操作Google Spreadsheet

https://qiita.com/tat_tt/items/b9757cc940338c7deeab

从 C# 使用 Google 表格的说明和读取数据的示例。

【日文】Azure Functions v3 到 v4 (.NET 7.0)

https://zenn.dev/tessecraft_r/articles/1d3f83025e0830

一篇文章解释了我如何将 Azure Functions 的 .NET 实现从 v3 迁移到 v4。

【日文】发布了 ReactiveProperty v9.1

https://zenn.dev/okazuki/articles/release-reactiveproperty-v9_1_0

ReactiveProperty v9.1 新特性介绍。 它解释了命令的扩展方法和对“ReactivePropertiesValidator”的改进等要点。

【日文】C# 11-常量字符串范围内的模式匹配

https://www.c-sharpcorner.com/blogs/c-sharp-11-pattern-matching-on-span-for-constant-string

关于 ReadOnlySpan<char> 可以使用列表模式匹配。

库、存储库、工具

dfederm/ReferenceTrimmer:轻松识别可以从 .NET 项目中删除哪些依赖项

https://github.com/dfederm/ReferenceTrimmer

MSBuild 任务和 Roslyn Analyzer 可以轻松找到未使用的依赖项。

使用 ReferenceTrimmer 删除未使用的依赖项

Azure/data-api-builder:Azure 数据库的数据 API 构建器为您的 Azure 数据库提供现代 REST 和 GraphQL 端点。

https://github.com/Azure/data-api-builder

REST/GraphQL 网关服务器到 Azure 数据库(CosmosDB、MySQL、PostgreSQL、SQL 数据库)。

主要用于从 Azure Static Web Apps 访问数据库。

宣布使用数据 API 构建器为 Azure 静态 Web 应用程序建立数据库连接
Azure 上的 GraphQL:第 12 部分 - GraphQL 即服务

wilder-minds/MinimalApiDiscovery:一个 .NET Core 库,用于支持以理智的方式注册最小 API

https://github.com/wilder-minds/MinimalApiDiscovery

允许您细分(分组)Minimal API 并自动注册它们的库。

用于大型 API 的最小 API 发现工具

jsakamoto/BlazingStory:Blazor 的“Storybook”克隆版,Blazor 是一个用于单独构建 UI 组件和页面的前端工作室。

https://github.com/jsakamoto/BlazingStory/

UI 组件目录 Blazor Storybook 的克隆。

https://twitter.com/jsakamoto/status/1635746624759795713

Damian Edwards/RazorSlices:基于轻量级 Razor 的 ASP.NET Core 模板,无需 MVC、Razor Pages 或 Blazor。

https://github.com/DamianEdwards/RazorSlices

在没有 ASP.NET Core MVC 或 Razor Pages 的情况下使用基于 Razor 的模板的库。

它主要用于 Minimal API 等用例。 (不使用 ASP.NET Core MVC 但依赖于 ASP.NET Core 框架)

https://twitter.com/DamianEdwards/status/1635404036118827008

推文

https://twitter.com/EgorBo/status/1636818556657516563

版权声明

国内板块由 InCerry 进行整理 : https://github.com/InCerryGit/WeekRef.NET
其余内容来自 Myuki WeekRef,由InCerry翻译(已获得授权) : https://github.com/mayuki/WeekRef.NET

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

格式如下:

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

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

.NET性能优化交流群

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

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

希望能有更多志同道合朋友加入,分享一些工作中遇到的.NET性能问题和宝贵的性能分析优化经验。目前一群已满,现在开放二群。

如果提示已经达到200人,可以加我微信,我拉你进群: ls1075

另外也创建了QQ群,群号: 687779078,欢迎大家加入。

.NET周报 【3月第3期 2023-03-19】的相关教程结束。

《.NET周报 【3月第3期 2023-03-19】.doc》

下载本文的Word格式文档,以方便收藏与打印。