.NET周刊【2月第3期 2025-02-16】

国内文章

我们是如何解决abp身上的几个痛点

https://www.cnblogs.com/jackyfei/p/18709265

张飞洪分享了abp框架在.net社区的使用经验,认为其在模块化、DDD和微服务上表现优良,但也存在不足。文章指出前端不支持VUE、社区版界面较差、售后服务慢及功能不易用等痛点。针对这些问题,他提出通过VUE3重做了部分功能,从而实现功能和细节的增强。例如,引入了文件管理、任务调度和认证授权等新功能,并改善了返回格式和异常处理,增强了用户体验。整体来看,这是一次有价值的技术分享。

Tinyfox 简易教程之:Hello World!

https://www.cnblogs.com/yunei/p/18696921

Tinyfox是一款高性能的Web服务基础框架,支持WebApi、WebSocket及动态HTML,具有跨平台特性,适应各种硬件和.NET环境,特别是.NET NativeAOT。它适合快速开发、微服务、高负载网络服务等场景,能够节省开发和运营成本。Tinyfox通过nuget公开发布,开发者可轻松引用。在Visual Studio中创建项目和引用Tinyfox非常简单,用户需配置路由和服务参数。完整开发手册可在其官网查阅。

揭秘 Sdcb Chats 如何解析 DeepSeek-R1 思维链

https://www.cnblogs.com/sdcb/p/18709107/20250210-think-tag-parse-in-chats

本文深入分析了如何使用 Sdcb Chats 集成 DeepSeek-R1 模型,特别是其思维链功能。通过 OpenAI .NET SDK,用户可以高效处理 DeepSeek-R1 返回的信息。文中详细介绍了两种思维链格式:官方预处理型和开源常见型。尽管 OpenAI SDK 在支持思维链方面存在一些挑战,如参数不一致、缺乏原生支持和工具功能不足,作者仍然选择它,原因包括代码质量高、兼容性强和性能优势显著。此文有助于理解思维链在 AI 推理中的应用。

从 Windows Forms 到微服务的经验教训

https://www.cnblogs.com/jellyai/p/18712972

本文探讨了软件开发中的技术债务,强调其普遍性和重要性。作者回顾了自己在 .NET 生态系统中的经历,从 Windows Forms 到 ASP.NET MVC,再到嵌入式系统,技术债务随着每种技术的演变而不同,但根本原因如短视决策和赶工仍然存在。文章强调良好的编码实践和持续的代码重构对减轻技术债务的重要性。尽管使用设计模式如 MVC 可以改善代码结构,但只有通过纪律性的维护才能真正避免技术债务的积累。这些经验对于开发者在现代软件开发中具有重要的指导意义。

在线客服的独立产品之路:如何将复杂的 .NET 系统打包到 Docker 镜像,使之能一键上线

https://www.cnblogs.com/sheng_chao/p/18711288

本文介绍了升讯威在线客服与营销系统的开发经历与Docker打包发布过程。作者在多个操作系统上部署系统,逐步完善用户体验。文章详细讲解了.NET程序打包为Docker镜像的注意事项,包括选择基础镜像、优化Dockerfile、确保运行时环境、配置文件、网络连接及日志记录。强调了如何使用环境变量简化配置,提高了系统上线效率。作者分享了个人经验与技术细节,对开发者具有实用价值。

Net跨平台硬件信息查询库 Hardware.Info:全面获取系统硬件详情

https://www.cnblogs.com/netcore5/p/18711795

Hardware.Info 是一个基于 .NET Standard 2.0 的跨平台库,支持 Windows、Linux 和 macOS,提供硬件信息查询功能。它通过不同系统接口获取详细硬件数据,包括电池、BIOS、CPU、存储、内存、显示器、网络适配器和显卡等。库通过 WMI、/dev、/proc 和 sysctl 查询信息。安装时使用 Install-Package Hardware.Info。示例代码展示了如何获取操作系统信息、内存状态、电池信息、BIOS 信息和 CPU 信息等。使用异常处理确保程序稳定性。

.NET最佳实践:避免同步读取HttpRequest

https://www.cnblogs.com/chenyishi/p/18706989

在ASP.NET Core中,所有I/O操作都应使用异步方法,避免线程池被阻塞,确保服务器能有效处理请求。使用同步方法,会导致线程在I/O操作期间被阻塞,从而降低性能。示例中,一个错误的用法是使用ReadToEnd方法,会使应用在客户端上传速度慢时停滞。正确的方法是使用ReadToEndAsync,能够保持线程不被阻塞,提升应用性能。读取表单数据时也应使用ReadFormAsync,避免阻塞。总之,遵循异步操作模式是提升ASP.NET Core应用性能的关键。

C# Winform 当音频播放完成后,播放下一个音频,怎么知道音频有没有播放完成

https://www.cnblogs.com/vipsoft/p/18711375

本文讨论了在C#中如何处理音频播放的问题,重点在于SoundPlayer和NAudio库的使用。SoundPlayer阻塞主线程,可能导致UI卡顿,而NAudio提供了更灵活的音频控制,支持事件处理和连续播放。文章还提醒在使用WaveOutEvent时需要注意释放资源,以避免系统错误。这些内容深入了音频处理的技术细节,同时提供了具体的代码示例。整体上,文章简洁明了,适合开发者参考。

.NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案

https://www.cnblogs.com/1312mn/p/18655859

随着物联网技术快速发展,智能设备之间的连接变得重要。yihong物联IoT系统基于C#开发,适用于智能家居和自动化控制。该系统支持Modbus RS485传感器及其他485通讯协议设备,通过分层架构设计,提高灵活性和维护性。系统处理数据并提供RESTful API,便于第三方集成。使用MySQL数据库存储数据,通讯使用MQTT协议,确保实时性和可靠性。已预适配多种设备,具有良好的扩展性。项目案例包括家用自动浇花系统和大型自动化控制。文章鼓励读者支持和交流,及参与社区讨论。

用 C# 插值字符串处理器写一个 sscanf

https://www.cnblogs.com/hez2010/p/18718386/csharp-interpolated-string-sscanf

这篇文章探讨了C#的插值字符串和插值字符串处理器,展示如何自定义字符串格式化行为。文章明确实现了C语言中的sscanf函数的C#版本,阐明了插值的便捷性及其在结构化日志框架中的应用。作者通过实例阐释了如何使用插值字符串处理器捕获参数,增强了示例的实用性和可读性。内容深入且具有较高的技术深度,清晰且易于理解,具有一定的创新性,及时反映了C#的最新特性。整体格式与引用合理。总的来说,文章具有良好的实践价值和可读性。

.NET最佳实践:业务逻辑减少使用异常

https://www.cnblogs.com/chenyishi/p/18712075

在.NET开发中,异常处理是提升应用健壮性的工具,但不应被滥用。异常引发与捕获性能较差,应在热路径中避免使用。滥用异常会导致性能开销大、代码可读性差和调试复杂度增加。应通过条件判断替代异常控制流程,如用TryGetValue和TryParse进行安全检查。在处理不可避免的异常时,应正确使用try-catch。此外,使用诊断工具可优化性能,监控异常情况。总之,合理运用异常处理,可以提高应用性能和可维护性。

V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库

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

V-Control是一个基于.NET MAUI的开源UI组件库,提供快速搭建应用程序界面的控件。它支持Android、iOS、macOS和Windows上的开发,使用C#和XAML。项目源代码可在GitHub上找到,用户可以通过设置VControl.Samples为启动项目来查看组件效果。该项目已被收录在C#/.NET优秀项目中,鼓励社区提交推荐或自荐,提升开发工作效率和质量。

探索 QuestPDF:全平台支持、多功能、专业级的 .NET PDF 库

https://www.cnblogs.com/netcore5/p/18709400

QuestPDF 是一个 .NET 库,简化了 PDF 文件生成。它具有合并文档、提取页面和加密功能。用户可通过简单的 API 进行页面布局,支持多种布局方式,如 Column 和 Row。用户可以添加文本、图像,并自定义样式。库支持动态内容生成,适合创建复杂的 PDF 文档。使用时只需通过 NuGet 安装并使用 API 即可轻松创建 PDF。QuestPDF 提供丰富的格式化选项,适合多种应用场景。

另辟新径实现 Blazor/MAUI 本机交互(二)

https://www.cnblogs.com/densen2014/p/18710286

该文章讨论了一个内部类 NativeApi.cs,提供了与文件操作相关的方法。set_config() 和 get_config() 方法设置和获取打印机名称,使用 Preferences 存储首选项。open_file_dialog() 方法打开文件选择对话框,返回文件内容的 Base64 编码或异常消息。save_file() 方法将数据保存到指定文件中。代码清晰,结构合理,实用性强,具有一定的原创性和及时性。

C#/.NET/.NET Core技术前沿周刊 | 第 24 期(2025年1.27-1.31)

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

这篇文章介绍了C#/.NET前沿技术周刊,提供每周最新的技术文章、社区动态和学习资源。内容包括一款基于.NET Core的医疗影像PACS系统的介绍,以及3D人脸重建技术的应用。同时推荐了八款WPF UI控件库和两款强大的翻译工具。此外,文章还介绍了.NET升级助手和AI应用程序评估的方法。文章具有实用性和前沿性,适合程序员阅读。

.NET中 泛型 + 依赖注入 的实现与应用

https://www.cnblogs.com/chenyishi/p/18714657

在.NET中,泛型依赖项注入提升了应用程序的模块化和扩展性。在ASP.NET Core中,注册泛型服务通过 AddTransient、AddScoped 或 AddSingleton 实现。示例中定义了泛型接口 IRepository<T> 和实现类 Repository<T>,并在 ConfigureServices 方法中注册。此外,控制器 MyController 使用构造函数注入 IRepository<MyEntity>。通过泛型工厂方法,动态创建不同类型的服务。此方法使用 IServiceProvider 解析泛型类型,并保证每种类型的服务都可以被正确实例化和使用。

五分钟搞定!Linux平台上用Ansible自动化部署SQL Server AlwaysOn集群

https://www.cnblogs.com/lyhabc/p/18701054/ansible-automated-deployment-sql-server-alwayson-cluster-rhel

本文介绍了如何在Linux平台上使用Ansible自动化部署SQL Server AlwaysOn集群。内容包括安装和配置SQL Server的三个步骤,以及提供的脚本内容。首先,用户需在数据库主节点上安装并配置SQL Server,随后在两台额外的节点上设置,最终通过特定脚本实现高可用性配置。文章强调不同平台的具体实施步骤,并提供了样本脚本和配置信息,适用于多种环境,包括Azure和VMware。

Drasi Reactions SDK

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

反应器是Drasi系统的重要组件,能够对数据变化做出响应。当数据变化时,反应器被触发,执行用户定义的操作。实现自定义反应器需创建Docker镜像,处理查询配置,并响应数据变化。Docker镜像需支持读取配置信息及接收数据变化的消息。反应器运行时,Drasi在容器内的 /etc/queries 目录中创建配置文件,并通过Dapr发送消息。Drasi Reactions SDK支持JavaScript/TypeScript、Python和.NET,处理变更事件和控制事件,并提供事件订阅机制。事件包括新增、删除和更新结果。操作的清晰度和实践性较高。

Drasi Sources SDK

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

Drasi数据源(Source)负责与系统的连接,处理更改日志,并将数据转为属性图模型。Source包括两个核心部分:数据源响应器和数据源代理。它多语言支持,如Java和.NET,支持异步处理和状态管理。SDK设计提供统一接口,适应多种数据源。实现自定义数据源需通过Http服务器获取初始数据,实现/acquire接口。示例代码展示了如何构建和启动SourceProxy,并处理Bootstrap请求。

C# 程序流控制 条件语句

https://www.cnblogs.com/AntToolStuido/p/18707353

本文介绍了C#中的条件控制语句,重点是if和switch结构。作者详细说明了if语句的用法,包括基本的if...else结构、独立的if语句和else if结构。代码示例清晰直观,强调了条件分支的重要性和注意事项,例如在维护代码时使用花括号以避免错误。此外,文章指出了C#中布尔值的要求及与运算符的使用区别,帮助读者更好地理解C#语法和条件判断逻辑。

并发编程 - 线程同步(七)之互斥锁Monitor

https://www.cnblogs.com/hugogoos/p/18713781

本文介绍了C#中的互斥锁Monitor及其与lock关键字的关系。lock是语法糖,最终解析为Monitor实现。Monitor类提供了更灵活的锁控制,但存在锁定值类型和使用try/finally结构时的注意事项。传递值类型会导致锁失效,异常处理不当可能导致未同步调用。文中提供了相关代码示例,帮助读者理解Monitor的具体使用及其潜在问题,特别是在生产者-消费者模式中的应用。

【译】HTTP 文件更新了请求变量

https://www.cnblogs.com/MeteorSeed/p/18715450

这篇文章介绍了在 Visual Studio 中对请求变量的支持。请求变量能够在发起 HTTP 请求时,提取响应中的数据以供后续请求使用。作者提供了如何在 API 身份验证中利用请求变量的实例,包括如何从响应中获取令牌并在随后的请求中使用该令牌。文中详细展示了请求变量的定义与用法,包括提取 JSON 和 XML 数据的语法。整体内容层次清晰,适合开发人员理解与应用。

乌龟冬眠箱湿度监控系统和AI辅助建议功能的实现

https://www.cnblogs.com/daxnet/p/18688623

本文介绍了利用树莓派2 Model B和相关技术搭建冬眠箱湿度监控系统的设计过程。文章设计需求包括定期采集湿度数据并发送至数据库,提供前端页面通过AI获取补水建议。在技术实现上,作者使用C语言进行编程,通过cron调度提升系统稳定性,选用Azure作为基础设施,并使用ASP.NET Core实现前端展示。系统展示湿度历史和趋势,强调了数据价值可作为参考。整体设计具备实用性和技术深度,但在补水指令自动化方面尚需完善。

如何为 .NET 在线客服系统的 Open Api 开放接口实现 QPS 限流功能

https://www.cnblogs.com/sheng_chao/p/18719024

本文介绍了升讯威在线客服与营销系统中实现QPS限流功能的技术与方法。作者首先概述了QPS接口限流的定义及其目的,包括防止服务器过载、确保公平性和提高服务稳定性。接着,文章详细介绍了在.NET系统中实现QPS限流的两种方案:基于内存的限流和基于令牌桶算法的限流。基于内存的限流使用内存记录请求时间,并判断请求是否超过限制。令牌桶算法通过令牌控制流量,允许突发请求。整个文章从实践角度探讨了技术细节,适合开发者参考。

主题

宣布推出 Chroma DB C# SDK - .NET 博客

https://devblogs.microsoft.com/dotnet/announcing-chroma-db-csharp-sdk/

AI 数据库 Chroma 的客户端 SDK 已经发布(基于社区)。

发布

文章、幻灯片等

在 Fluent UI Blazor 的数据网格中添加、删除、编辑和作数据

https://qiita.com/spc_rtakei/items/a14e0cc13fa9c1dfddd1

了解如何在 Fluent UI Blazor 中启用在 DataGrid 中添加、删除和编辑多条数据的功能。

在 Visual Studio 中为 GitHub Copilot 补全引入代码引用 - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/introducing-code-referencing-for-github-copilot-completions-in-visual-studio/

对引用 Visual Studio 中 GitHub Copilot 上发布的代码的行为的说明,以及如何设置它。

使用 HttpClient 恢复下载

https://zenn.dev/shinta0806/articles/resume-download

如何在 HttpClient 中通过范围请求从中间下载。

我想模拟 Azure.AI.OpenAI 的类

https://zenn.dev/microsoft/articles/openai-dotnet-mock

了解如何在 Azure.AI.OpenAI 中模拟 ChatClient 等类。

使用 Fluent UI Blazor 创建具有类似 Excel 的筛选和排序功能的数据网格

https://qiita.com/spc_rtakei/items/62526d2ffe44d3b5165a

了解如何在 Fluent UI Blazor 的 DataGrid 中实现筛选和排序功能。

C# 定式 - 注册表作

https://qiita.com/chai0917/items/495ad9d7e0171fc59b4f

VisualStudio.Extensibility:标记器支持和设置更新 - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/visualstudio-extensibility-tagger-support-and-updates-to-settings/

Visual Studio 17.13 中的 VisualStudio.Extensibility 中的新增功能。

本文讨论了 tagger(用于文本修饰的标记)支持和用于监控配置更改的配置 API。

在 IIS 中设置应用程序环境变量而无需重新启动

https://andrewlock.net/setting-environment-variables-in-iis-and-avoiding-app-pool-restarts/

了解如何为在 IIS 上运行的应用程序设置环境变量。

本文介绍了设置环境变量的不同方法,以及如何避免在更改设置时重新启动应用程序池。

使用受保护的本地存储 (Blazor Server)

https://zenn.dev/tetr4lab/articles/abff9239c12028

了解如何在 Blazor 中将数据保存到浏览器的本地存储。

https://dev.to/roicp/share-authentication-cookies-between-aspnet-4x-and-aspnet-core-47gj

了解如何在 ASP.NETASP.NET Core 应用程序之间共享身份验证 Cookie。

更有效地使用 MemoryPack ~ 什么是 IBufferWriter 和 ReadOnlySequence?- 阁楼工作室 Kai

https://andantesoft.hatenablog.com/entry/2025/02/14/183450

IBufferWriter 的说明、如何实现它以及如何更高效地实现它。

从 .NET 9 开始,Debug.Assert 现在默认显示断言的条件

https://qiita.com/RyotaMurohoshi/items/23515559598aa0fda7a1

.NET 9 中的 Debug.Assert 现在在断言失败时在消息中包含条件表达式,以及如何实现这些表达式。

ASP.NET Core 2.3 中使用 Razor 类库

https://zenn.dev/masakura/articles/a5dd568a30a265

ASP.NET 在 Core 2.3 中使用 Razor 类库项目时出现的问题以及如何解决这些问题。

告别 WebDriver:浏览器自动化的现代替代方案 - 部分 1

https://dev.to/serhii_korol_ab7776c50dba/say-goodbye-to-webdriver-modern-alternatives-for-browser-automation-part-1-4nna

了解如何使用 Chrome DevTools 协议(而不是 WebDriver)来控制 Chrome。

[C#] 增量源生成器简介

https://yn01.dev/blog/introduction-to-incremental-source-generator/

有关 C# 中的增量源代码生成器的介绍性文章。

本文介绍了如何生成代码、如何生成错误以及如何使用内置的 IncrementalValuesProvider。

库、存储库、工具等

AntonBergaker/InterpolatedParser:插值字符串,但相反! 一个非常被诅咒的 C# 解析器库。

https://github.com/AntonBergaker/InterpolatedParser

一个库,用于分析字符串,就好像它们是 interplated 字符串格式一样。

hlaueriksson/GEmojiSharp: :octocat: C#、ASP.NET Core 和 Blazor 的 GitHub 表情符号,终端的 dotnet 工具和 PowerToys Run 插件

https://github.com/hlaueriksson/GEmojiSharp

用于处理 GitHub 样式的表情符号表示法的库

.NET 交流群

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

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

希望能有更多志同道合朋友加入,分享一些工作中遇到的.NET问题和宝贵的分析优化经验。目前一群已满,现在开放二群。 可以加我vx,我拉你进群: ls1075 另外也创建了QQ Group: 687779078,欢迎大家加入。

相关推荐
InCerry6 天前
.NET周刊【2月第2期 2025-02-09】
.net周刊
InCerry16 天前
.NET周刊【2月第1期 2025-02-02】
.net周报·.net周刊
InCerry17 天前
.NET周刊【1月第4期 2025-01-26】
.net周报·.net周刊
InCerry18 天前
.NET周刊【1月第3期 2025-01-19】
.net周报·.net周刊
InCerry19 天前
.NET周刊【1月第2期 2025-01-12】
.net·.net周报·.net周刊
InCerry1 个月前
.NET周刊【1月第1期 2025-01-05】
.net周报·.net周刊
InCerry2 个月前
.NET周刊【12月第4期 2024-12-22】
.net周报·.net周刊
InCerry2 个月前
.NET周刊【12月第3期 2024-12-15】
.net周报·.net周刊
InCerry2 个月前
.NET周刊【12月第2期 2024-12-08】
.net周报·.net周刊