.NET周刊【5月第1期 2024-05-05】

国内文章

一个开源轻量级的 C#代码格式化工具(支持 VS 和 VS Code)

https://www.cnblogs.com/Can-daydayup/p/18164905

CSharpier 是一个开源、免费的 C#代码格式化工具,特点是轻量级且依赖 Roslyn 引擎重构代码格式。支持的 IDE 包括 Visual Studio (2019 与 2022) 和 Visual Studio Code 等。该项目在 GitHub 上托管,并被集成到 C#/.NET/.NET Core 优秀项目框架精选列表中。DotNetGuide 技术社区也推荐使用 CSharpier,并为.NET 开发者提供交流与学习的平台。

.NET 开源、功能强大、跨平台的图表库 - LiveCharts2

https://www.cnblogs.com/Can-daydayup/p/18166862

LiveCharts2 是一款.NET 开源图表、地图和仪表库,特点是功能强大、简单、灵活且跨平台,支持多种平台如 Maui、Uno Platform 等。提供在线 API 文档,并可以通过 NuGet 安装。为预发行版本,教程举例说明了如何在 Blazor Wasm 中创建基础柱状图和包含延迟动画的图表。

【YoloDeployCsharp】基于.NET Framework 的 YOLO 深度学习模型部署测试平台

https://www.cnblogs.com/guojin-blogs/p/18172502

该项目是一个基于.NET Framework 4.8 开发的深度学习模型部署测试平台,支持 YOLO 系列模型(YOLOv8 至 YOLOv9)的图像和视频检测。模型部署采用 OpenVINO™、TensorRT、ONNX runtime 和 OpenCV DNN 引擎,在多种设备上提供推理功能。项目自行开发了 OpenVINO™ 和 TensorRT 的 C#接口,并在 GitHub 上提供源码。支持的模型包括从 YOLOv5 到 YOLOv9 以及 YOLO World,通过不同的部署工具进行了算力测试。测试结果显示,在 GPU 上 TensorRT 具有较好的推理速度,而在 CPU 上 OpenVINO 表现出色。项目源码已开源于 GitHub,同时提供了相关的搭建和使用教程。

Windows 下绑定线程到指定的 CPU 核心

https://www.cnblogs.com/czwy/p/18166365

Windows 操作系统提供了 SetThreadAffinityMask 和 SetProcessAffinityMask 两个 Win32 函数,用于将线程或进程绑定到指定的 CPU 逻辑核心上,以提高执行效率。这两个函数通过设置处理器关联掩码实现绑定,对于超过 64 核心的 CPU 需要使用 SetThreadGroupAffinity。通过示例代码可以实现绑定线程到特定 CPU 核心并监测执行时间。这种技术可以帮助提升性能,减少缓存未命中,并且对实时系统和并发控制非常有用。但需要注意的是,如果所绑定的 CPU 核心已有高负荷,则可能导致性能降低。

您可知道如何通过HTTP2实现 TCP 的内网穿透???

https://www.cnblogs.com/hejiale010426/p/18166935

由于服务器内部网站无法直接访问外网,需要通过申请特定端口才能访问外部 IP 和端口,这一过程耗时且繁琐。因此,开发了利用现有 Http 网关端口进行 TCP 服务转发的 Taibai 项目,这样可以避免频繁的端口申请和审批。项目中创建了 Taibai.Core 核心类库,其中的 DelegatingStream 类继承自 Stream,并包装了一个内部流对象,重载了基类的读写和定位等方法,以实现特定的流操作功能。

.NET Emit 入门教程:第七部分:实战项目 1:将 DbDataReader 转实体

https://www.cnblogs.com/cyq1162/p/18149511

通过.NET Emit 中间语言编程可以提高程序性能。ORM 实现分为三个阶段:初级阶段利用代码生成器生成基础增删改查代码,效率高但可维护性低;中级阶段使用反射来替代生成器,运行效率低但开发和可绑定性得提高,可通过缓存优化;高级阶段示例通过 Emit 和 ADO.NET 读取数据库数据到实体类,兼顾运行效率和可维护性。CYQ.Data 的代码示例展示了如何使用 Emit 将 DbDataReader 转换到实体对象。

让.NET 8 支持 Windows Vista RTM

https://www.cnblogs.com/shanyou/p/18173208

Windows 系统每次更新会增加许多 API,导致新开源项目往往不再支持早期版本的 Windows。.NET 8 AOT 编译生成的程序需要 Windows 7 SP1 以上版本支持的三个函数,YY-Thunks 项目通过动态加载和模拟 API 行为,解决了在旧版本 Windows 系统上运行程序的问题。该项目支持多种编译器和运行库,易于通过 NuGet 集成,最新版 v1.0.10-Beta3 支持了.NET 8 的 Native AOT。为确保项目兼容性,开发者应查阅 YY-Thunks 官方文档或源码。

C#开源的两款功能强大的录屏神器

https://www.cnblogs.com/Can-daydayup/p/18170962

ScreenToGif 是由 C#开发的开源屏幕录制及 GIF 制作工具,ShareX 是基于.NET 的截图、录屏软件。这两款软件均被收录在 C#/.NET/.NET Core 优秀项目和框架精选中,该精选旨在分享 C#、.NET 领域的最新动态和最佳实践。DotNetGuide 技术社区提供.NET 相关学习资料、技术分享、项目框架推荐等,支持开发者交流和成长。

推荐 3 款程序员常用的画图工具

https://www.cnblogs.com/Can-daydayup/p/18169082

大姚在 DotNetGuide 技术社区微信群中推荐了三款程序员常用的画图工具。ProcessOn 是一款支持多种图形和实时协作的在线作图工具,虽然免费版有文件数量限制,它提供了 AI 生成思维导图流程图等功能。Excalidraw 是一款开源的虚拟协作白板,可以手绘风格绘制图表。Draw.io 是一款无需注册、完全免费的在线绘图工具,适合创建多种类型的图表。这三款工具都被整理到程序员常用工具软件栏目中,供开发者选择。

.NET CORE 完美支持 AOT 的 ORM SqlSugar 教程

https://www.cnblogs.com/sunkaixuan/p/18170061

AOT 适合于工具类项目且具有启动快、禁止反编译等优点,但不适宜于反射多的业务项目。SqlSugar 的 AOT 版本经过实践反复迭代,已支持包括 CodeFirst 和异步方法,并且在生产中投入使用。支持的数据库有 SqlServer(需要特定配置)、MySql、Sqlite 和 PostgreSQL,Oracle 不支持。提供了 AOT 下的 Hello World 教程和 SqlSugar 的简单配置,但 AOT 存在功能限制,不适合大型项目,只有.NET 基础 API 支持,不支持.NET MVC。

.Net 8.0 下的新 RPC,IceRPC 之试试的新玩法"打洞"

https://www.cnblogs.com/xlgwr/p/18169319

IceRPC 技术使得防火墙无法阻碍客户端与服务端之间的通信,通过新玩法“打洞”,实现了客户端到服务端的通信模式的翻转。文章详述了 IceRPC 的调用机制,包括调用器 invoker 的获取与使用,以及如何在服务端推送通知至客户端。作者还演示了如何通过 Slice 接口实现服务器向客户端发送异常温度警报的推送通知功能。

自动化测试数据生成:Asp.Net Core 单元测试利器 AutoFixture 详解

https://www.cnblogs.com/ruipeng/p/18163423

AutoFixture 是一个开源的.NET 库,用于简化单元测试中的安排阶段,并帮助自动生成测试数据。与 Bogus 相比,AutoFixture 的优势在于其可以自动适应类的变化,减少维护成本。AutoFixture 支持与 NUnit 和 xUnit 等.NET 测试框架无缝集成,并且通过 Create 和 CreateMany 方法,可以便捷地生成各种类型的测试数据实例。

如何基于 surging 跨网关跨语言进行缓存降级

https://www.cnblogs.com/fanliang11/p/18173704

Surging 是一个开源的微服务引擎,支持 rpc 服务治理和中间件,能够解决多语言协同研发中的配置统一和数据缓存问题。文章介绍了如何创建和使用拦截器,特别是缓存拦截器,和如何设置缓存键。还提供了如何在多语言调用中应用缓存拦截以及创建拦截模块的方法。文章解释了 Surging 的两种服务调用方式:接口代理调用和基于 routepath 调用,在基于接口的场景中,支持复杂类型参数的缓存拦截。

Blazor 流程编排的艺术:深入 Z.Blazor.Diagrams 库的使用与实践

https://www.cnblogs.com/xuzeyu/p/18173547

在.NET 生态中,Blazor 是一个逐渐受到欢迎的前端框架。Z.Blazor.Diagrams 库基于 Blazor 开发,可以高度自定义和扩展,帮助开发者实现流程编排。文章提到库受 React 图库启发,通过文档和示例帮助开发者快速理解其使用。作者介绍了如何在 Blazor 应用中引入 ZBD,创建流程图,并自定义节点交互。

Asp-Net-Core 开发笔记:进一步实现非侵入性审计日志功能

https://www.cnblogs.com/deali/p/18165737

该技术文章介绍了 ASP.NET Core 中通过应用 AOP(面向切面编程)来实现动态审计日志功能的高级用法。作者对原有代码进行了重构,创建了新目录结构,并设计了 EntityChangeInfo 实体来保存实体变化。同时,对 AuditLog 对象进行了改进,使之包含更详细的操作日志信息。此外,文章还涉及了过滤器(AuditLogAttribute)的简化改进,省略了部分参数,增加了自动获取功能。

.Net 8.0 下的新 RPC,IceRPC 之使用 Dev Containers 进行 .NET QUIC 精简开发

https://www.cnblogs.com/xlgwr/p/18171004

本文是关于如何使用 Dev Containers 进行.NET 的 QUIC 协议开发的指导文章。QUIC 是一个注重性能和安全的传输协议,适合远程过程调用(RPCs)。但.NET 对于 QUIC 的跨平台支持有限,因此通过使用 Dev Containers 可以解决这个问题,创建一个可移植、一致的开发环境。文章步骤详细,提供了创建和配置开发容器的详细指引。先决条件包括安装 Docker 和 Visual Studio Code,并通过 VS Code 的 Dev Containers 扩展来构建开发容器。最后本文还展示了如何在容器中运行一个简单的 QUIC 服务器和客户端,以及生成服务器和客户端代码的命令。

.Net 8.0 下的新 RPC,IceRPC 之如何创建连接 connection

https://www.cnblogs.com/xlgwr/p/18173254

IceRPC 支持创建连接,连接是其核心功能,负责发送请求和接收响应。C#中可通过 ClientConnection 类或 ConnectionCache 类创建客户端连接,操作简便且可异步连接。服务端通过 Server 类实例接收连接,并可监听配置的地址上的新连接。连接既支持客户端也支持服务端,且无区别使用同一 API。作者强调实践重要性,建议持续练习以提升技能,并欢迎交流。

.Net 8.0 下的新 RPC,IceRPC 之"请求"生命线意义非凡

https://www.cnblogs.com/xlgwr/p/18170054

本文讨论了在 RPC(远程过程调用)系统中加入请求截止时间的重要性,以及不设截止时间可能给分布式系统带来的负面影响。文章解释了超时与截止时间的区别,并强调了在实现强健的分布式系统时,设置适当的截止时间的意义。基于截止时间的机制可以通过拦截器和中间件以灵活的方式在 IceRPC 中实现,提升了性能和可靠性。

Unity 热更--AssetBundle 学习笔记 1.0【AB 包资源加载工具类的实现】

https://www.cnblogs.com/TonyCode/p/18170759

这篇文章主要介绍了如何封装工具类来管理 AssetBundle 资源的加载。首先实现了一个确保 AB 资源包只加载一次的 LoadAssetBundleManager 单例类,采用 Dictionary 来记录加载的资源。文章还讲解了如何灵活获取主包路径、加载依赖包以及实现异步和同步加载资源的方法。最后,提供了卸载单个及所有 AB 资源包的功能。

C#的基于.net framework 的 Dll 模块编程(五) - 编程手把手系列文章

https://www.cnblogs.com/lzhdim/p/18148913

本文介绍了在 C#环境中使用 DLL 类库的三种方法:静态类、动态类和窗体,只需要引用类库并声明命名空间即可使用。同时也阐述了如何使用其他 C# DLL 库,方法与前述相同。针对 VC++的 DLL,需声明函数定义后方可使用,并给出了调用 Windows API 函数的例子。提供了示例下载链接。

主题

宣布推出第一个真正适用于移动、Web、桌面和嵌入式应用程序的 .NET 单一项目

https://platform.uno/blog/the-first-and-only-true-single-project-for-mobile-web-desktop-and-embedded-in-net/

Uno 平台 5.2 已发布。

此版本包括对 Skia 渲染器的增强,以实现更好的性能、多窗口支持、对 Uno SDK 的改进、对 .NET 9 预览版的支持等。

此外,项目模板已更新,因此单个项目现在可以支持所有平台。

  • 发布 5.2.80 · unoplatform/uno

版本 2.3.7 · mysql-net/MySqlConnector

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

MySqlConnector 2.3.7 已发布。

此版本修复了多个错误。

.NET Aspire 预览版 6 - .NET Aspire

https://learn.microsoft.com/en-us/dotnet/aspire/whats-new/preview-6

.NET Aspire 预览版 6 已发布。

此版本包括删除和修改过时的 API、Aspire 仪表板的令牌身份验证、对 Qdrant 矢量数据库的支持以及其他细微更改。

介绍 Elastic 的 OpenTelemetry SDK for .NET

https://www.elastic.co/jp/blog/elastic-opentelemetry-distribution-dotnet-applications

Elastic .NET OpenTelemetry SDK 的 Alpha 版本现已推出。

Elastic OpenTelemetry 发行版包括 Elastic 的 OpenTelemetry 的默认配置以及使用 OpenTelemetry SDK 的扩展。当前的 alpha 版本与普通版本几乎没有区别,但计划在未来添加更多功能。

使用 .NET 为 Microsoft AI 构建可扩展网关 - .NET 博客

https://devblogs.microsoft.com/dotnet/building-a-scalable-gateway-for-microsoft-ai/

使用 .NET 和 YARP 为 Microsoft 的 Bing 和 Copilot 等 AI 服务构建前端网关的案例研究。

本文介绍了利用 YARP 灵活配置(例如镜像、速率限制和动态配置更改)的示例。

发布 v8.1.0 · dotnet/orleans

https://github.com/dotnet/orleans/releases/tag/v8.1.0

Orleans v8.1.0 已发布。

此版本支持与 Aspire 集成,并包含各种修复和改进。

文章、幻灯片等

在 C# 中使用异步检测阻塞调用 | James Crosswell | 代码博客

https://www.jamescrosswell.dev/posts/async-detecting-blocking-calls

如何调查异步方法中的阻塞调用。

文章介绍了使用 Ben.BlockingDetector 进行检测,并将其合并到 Sentry 中,以便可以在 Sentry 上进行确认。

.NET 正则表达式 - 捕获

https://zenn.dev/sayurin/articles/76f6739d7ac75f

关于在 .NET 正则表达式中进行捕获。

当有多个命名捕获时该怎么办,如何在 F# 中自然地处理命名捕获等。

使用主构造函数重构 C# 代码 - .NET 博客

https://devblogs.microsoft.com/dotnet/csharp-primary-constructors-refactoring/

关于使用主构造函数进行重构。

本文介绍了一个示例,将构造函数中传递 ILogger 等内容的模式替换为主构造函数。

组装 .NET 的 AsciiMath 解析器

https://andrewlock.net/hacking-together-an-asciimath-parser-for-dotnet/

如何使用 .NET 中的 AsciiMath 解析器。

本文介绍了多种语言的 AsciiMath 解析器,并解释了如何最终使用 Jint 让 JavaScript 实现可从 .NET 运行。

配置 ASP.NET Core Minimal API 以进行生产和大规模使用 - Qiita

https://qiita.com/takashiuesaka/items/654c6e0d0bb7c92854a8

介绍使用 ASP.NET Core Minimal API 定义和实现 API 时组织代码的技术(翻译)。使用扩展方法进行聚合、使用 MapGroup 进行分组等。

  • 组织 ASP.NET Core 最小 API

如何在 OpenTelemetry 中的两个跨度之间创建链接

https://dev.to/koma_koma_d/how-to-create-a-link-between-two-spans-in-opentelemetry-424i

关于如何创建连接 OpenTelemetry 跨度的跨度链接。

[JWT] 如何解决解码过程中出现的 Unable to demo the payload 错误

https://zenn.dev/o0rororo0o/articles/028202490cc99d

对于 Microsoft.AspNetCore.Authentication.JwtBearer 7.0.14 或更高版本,如果 JWT iat 字段为非数字,则会发生错误。

使用 SearchValues 优化 C# 中的字符串搜索

https://dev.to/admirmujkic/optimizing-string-searches-in-c-with-searchvalues-1105

关于“SearchValues”类的用法和性能,该类是在.NET 8 中添加的,可以专门定义用于搜索特定值。

ReSharper 和 Rider 2024.1 的第一组错误修复已发布 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2024/04/17/the-first-set-of-bug-fixes-for-resharper-and-rider-2024-1-are-here/

ReSharper 和 Rider 2024.1.1 已发布。

此版本是 ReSharper 和 Rider 2024.1 的第一个错误修复,修复了一些小缺陷。

itsmattkc/dotnet9x:.NET 2.0 - 3.5 向后移植到 Windows 9x

https://github.com/itsmattkc/dotnet9x

尝试将 .NET Framework 2.0-3.5 向后移植到 Windows 9x 的项目。

-[Yajiuma PC Watch]将.NET Framework 反向移植到 Windows 95 的强者出现了

Visual Studio 会迁移到 .NET Core 并成为多平台吗?- NDepend 博客

https://blog.ndepend.com/visual-studio-multi-platform/

为了考虑 Visual Studio 是否会转换为 .NET CoreCLR,我们正在对 Visual Studio 当前的程序集结构进行调查和假设。

活动

C#性能学习会(2024/04/27 13:30~)

https://cs-reading.connpass.com/event/309714/

现代 C# .NET Web 开发 ~ gRPC、GraphQL、Blazor 也可用 ~ (2024/05/15 19:00~)

https://sansan.connpass.com/event/316664/

库、存储库、工具等。

Cysharp/KcpTransport:KcpTransport 是 RUDP 的纯 C# 实现,用于高性能实时网络通信

https://github.com/Cysharp/KcpTransport

KCP 的 .NET 移植实现(基于 UDP 的 RUDP 类协议)。

网站、文档等

推文

当一个局部函数被编译成 IL 时,它就变成了一个名称以“g”开头的方法

https://x.com/khyperia/status/1782787967703998667?s=12

IList<T> 可能会变成 IReadOnlyList<T> 的故事。

https://x.com/terrajobst/status/1782922704997498982?s=12

深入探索

List Add 在 net9.0 Preview 3 中比在 net8.0 中慢得多(几乎是 3 倍) · Issue #101437 · dotnet/runtime

https://github.com/dotnet/runtime/issues/101437

关于 .NET 9 List 由于 JIT 更改而可能变慢的问题。目前,这种情况仅发生在 Apple Silicon (Arm64) 上。

https://x.com/davidfowl/status/1782961890580414894?s=12

版权声明

  • 国内板块由 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,欢迎大家加入。

ea9df0eb306ff9264ddbb8aaf11f0969.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值