多个 .NET Core SDK 版本之间进行切换 global.json
摘要:由于同一台电脑可以安装多个版本的.NET Core SDK。 当安装了许多不同版本的.NET Core SDK 之后,要如何才能使用旧版dotnet 命令,执行dotnet new 或dotnet build 之类的命令? 这部分其实并不困难,只要设定global.json 即可。 首先要查询目前电
阅读全文
posted @
2024-03-12 07:30
chester·chen
阅读(2077)
推荐(8)
HttpClientHandler VS SocketsHttpHandler
摘要:.NET Framework 和 .NET Core 2.0 及更低版本中由 HttpClient 使用的默认消息处理程序为HttpClientHandler。 从 .NET Core 2.1 开始,类SocketsHttpHandler提供了更高级别的 HTTP 网络类(例如HttpClient
阅读全文
posted @
2024-03-10 18:11
chester·chen
阅读(849)
推荐(1)
.Net Core中使用DiagnosticSource进行日志记录
摘要:System.Diagnostics.DiagnosticSource 可以丰富地记录程序中地日志,包括不可序列化的类型(例如 HttpResponseMessage 或 HttpContext)。 System.Diagnostics.DiagnosticSource 通过订阅发布模式运行,我们可
阅读全文
posted @
2024-03-12 14:52
chester·chen
阅读(994)
推荐(4)
DiagnosticSource DiagnosticListener 无侵入式分布式跟踪
摘要:ASP.NET Core 中的框架中发出大量诊断事件,包括当前请求进入请求完成事件,HttpClient发出收到与响应,EFCore查询等等。 我们可以利用DiagnosticListener来选择性地监听这些事件,然后通过自己的方式组织这些日志,实现无侵入的分布式跟踪。 下面我们通过Diagnos
阅读全文
posted @
2024-03-14 09:14
chester·chen
阅读(761)
推荐(3)
LoggerMessageAttribute 高性能的日志记录
摘要:.NET 6 引入了 LoggerMessageAttribute 类型。 使用时,它会以source-generators的方式生成高性能的日志记录 API。 source-generators可在编译代码时,可以提供其他源代码作为编译的输入。 LoggerMessageAttribute依赖于
阅读全文
posted @
2024-03-15 09:50
chester·chen
阅读(1015)
推荐(1)
.Net Core 你必须知道的source-generators
摘要:源生成器是 C# 9 中引入的一项功能,允许在编译过程中动态生成代码。 它们直接与 C# 编译器集成(Roslyn)并在编译时运行,分析源代码并根据分析结果生成附加代码。 源生成器提供了一种简化的自动化代码生成方法,无需外部工具或单独的预编译步骤。 通过无缝集成到编译过程中,源生成器可以提高生产力、
阅读全文
posted @
2024-03-16 08:30
chester·chen
阅读(1990)
推荐(7)
.NET Core使用 CancellationToken 取消API请求
摘要:您是否曾经访问过一个网站,它需要很长时间加载,最终你敲击 F5 重新加载页面。 即使用户刷新了浏览器取消了原始请求,而对于服务器来说,API也不会知道它正在计算的值将在结束时被丢弃,刷新五次,服务器将触发 5 个请求。 为了解决这个问题,ASP.NET Core 为 Web 服务器提供了一种机制,就
阅读全文
posted @
2024-03-17 08:11
chester·chen
阅读(2565)
推荐(10)
使用 LogProperties source generator 丰富日志
摘要:Nuget包 Microsoft.Extensions.Telemetry.Abstractions 包含的新的日志记录source generator,它支持使用[LogProperties]将整个对象作为State与日志一起记录。 我将展示一种方法来控制如何使用[LogProperties]对象
阅读全文
posted @
2024-03-18 09:03
chester·chen
阅读(540)
推荐(3)
.Net Core 使用 TagProvider 与 Enricher 丰富日志
摘要:TagProvider [LogProperties] 与 [LogPropertyIgnore] 如果用在DTO不存在任何问题,如果用在Domain实体上,可能有点混乱。 您可能不希望因日志记录问题而使您的域模型变得混乱。对于这种情况,可以使用[TagProvider]属性来丰富日志。 我们仍然使
阅读全文
posted @
2024-03-19 07:59
chester·chen
阅读(638)
推荐(3)
C# 12 拦截器 Interceptors
摘要:拦截器Interceptors是一种可以在编译时以声明方式替换原有应用的方法。 这种替换是通过让Interceptors声明它拦截的调用的源位置来实现的。 您可以使用拦截器作为源生成器的一部分进行修改,而不是向现有源编译添加代码。 演示 使用 .NET 8 创建一个控制台应用程序。并在Propert
阅读全文
posted @
2024-03-20 09:27
chester·chen
阅读(2342)
推荐(5)
为什么推荐在 .NET 中使用 YAML 配置文件
摘要:在现代应用开发中,配置管理是一个非常重要的部分。随着微服务、容器化和云原生架构的流行,使用简单、易读的配置格式变得尤为重要。在 .NET 开发中,虽然 JSON 是默认的配置文件格式,但 YAML("YAML Ain't Markup Language")正越来越受到开发者的青睐。 YAML 是什么
阅读全文
posted @
2024-12-23 15:52
chester·chen
阅读(3469)
推荐(12)
.NET 9 中的 多级缓存 HybridCache
摘要:HybridCache是什么 在 .NET 9 中,Microsoft 将 HybridCache 带入了框架体系。 HybridCache 是一种新的缓存模型,设计用于封装本地缓存和分布式缓存,使用者无需担心选择缓存类型,从而优化性能和维护效率。 实际上,HybridCache 基于 IDistr
阅读全文
posted @
2024-12-24 10:35
chester·chen
阅读(2381)
推荐(11)
.NET 9 增强 OpenAPI 规范,不再内置swagger
摘要:在 .NET 9 的更新中,微软增强了原生 OpenAPI。这一变化表明 .NET 正在更加拥抱开放标准,同时让开发者体验更加轻松高效。本文将探讨为何进行这一更改、OpenAPI 的优势,以及如何在 .NET 9 中使用 OpenAPI。 为什么不再内置 Swagger? 1. 标准化的需求 Swa
阅读全文
posted @
2024-12-25 09:21
chester·chen
阅读(4160)
推荐(5)
Scoop: 开发者多环境管理利器
摘要:Scoop是什么? Scoop 是一个基于 Windows 的包管理器,能够帮助开发者高效管理开发环境和应用程序。 它推荐通过命令行进行包的安装、更新和卸载,同时提供了简单易用的包组织方式,透明化了安装和管理的过程。 与传统的 Windows 应用安装比较,Scoop 允许用户使用命令行将应用安装到
阅读全文
posted @
2024-12-27 08:09
chester·chen
阅读(2068)
推荐(5)
在 .NET 中使用 Tesseract 识别图片文字
摘要:1. 什么是 Tesseract Tesseract 是一个强大的字符识别 (OCR) 工具。它最初由 HP 发布,现在由 Google 和学术社区共同维护和开发。 Tesseract 支持多种语言和格式,能够高效地识别图片中的文字。 2. 如何安装 Tesseract 要在 .NET 项目中使用
阅读全文
posted @
2025-01-08 08:46
chester·chen
阅读(3585)
推荐(19)
AsyncLocal的妙用
摘要:AsyncLocal<T>是一个在.NET中用来在同步任务和异步任务中保持全局变量的工具类。 它允许你在不同线程的同一个对象中保留一个特定值,这样你可以在不同的函数和任务中访问这个值。 这是在实现异步任务中维持一致性和优雅性的一种重要手段。 用法 创建一个AsyncLocal实例: 你可以使用Asy
阅读全文
posted @
2025-01-10 15:24
chester·chen
阅读(1232)
推荐(9)
.NET最佳实践:webapi返回IAsyncEnumerable提升性能
摘要:什么是IAsyncEnumerable IAsyncEnumerable<T> 是 .NET 中用于表示异步数据流的接口。 它允许你逐个异步地获取数据项,而不是将所有数据一次性加载到内存中。这样可以减少内存占用,尤其在处理大量数据时更加高效。 与 IEnumerable<T> 不同,IEnumera
阅读全文
posted @
2025-02-08 11:56
chester·chen
阅读(1584)
推荐(4)
.NET最佳实践:避免滥用Task.Run
摘要:在 C# 中,Task.Run 是用来在后台线程中执行异步任务的一个常见方法。 它非常适用于需要并行处理的场景,但如果不加以谨慎使用,可能会导致额外的线程池调度,进而影响程序的性能。 什么是线程池? 线程池是 .NET 中的一种优化机制,它通过复用固定数量的线程来减少线程创建和销毁的开销。 线程池中
阅读全文
posted @
2025-02-09 09:06
chester·chen
阅读(2671)
推荐(7)
.NET最佳实践:避免同步读取HttpRequest
摘要:为什么要避免同步读取 ASP.NET Core 中的所有 I/O 操作都是异步的。服务器实现了 Stream 接口,该接口同时具备同步和异步的方法。 在进行 I/O 操作时,应优先使用异步方法,以避免阻塞线程池的线程。 如果阻塞了线程池线程,可能会导致服务器无法处理更多请求,造成急剧性性能下降。 尤
阅读全文
posted @
2025-02-10 09:26
chester·chen
阅读(1552)
推荐(8)
.NET最佳实践:业务逻辑减少使用异常
摘要:在 .NET 开发中,异常处理是保证应用健壮性的重要手段,但不应被滥用。 异常的引发和捕获相较于普通的代码逻辑性能较差,因此在热路径(频繁执行的代码路径)中,避免依赖异常来控制程序流是提升性能的关键之一。 为什么要减少异常的使用? 性能开销大:异常处理机制涉及堆栈回溯和额外的系统调用,可能显著影响性
阅读全文
posted @
2025-02-13 09:51
chester·chen
阅读(1561)
推荐(6)
.NET中 泛型 + 依赖注入 的实现与应用
摘要:在.NET中,注入泛型依赖项是一个常见的场景。 在依赖注入(DI)中使用泛型可以使得应用程序更加模块化、易于测试和扩展。 在ASP.NET Core中注册泛型服务 假设我们有一个需要注入的泛型接口 IRepository<T> 和实现类 Repository<T>。 public interface
阅读全文
posted @
2025-02-14 10:09
chester·chen
阅读(2032)
推荐(2)
非容器环境中使用Selenium,提升Chrome与ChromeDiver兼容性
摘要:背景 在 Windows 环境下使用 Selenium 时,Chrome 浏览器版本与 ChromeDriver 版本的兼容性问题是一个常见的困扰。 由于 Chrome 频繁更新,而 ChromeDriver 需要与特定版本的 Chrome 精确匹配,导致 Selenium 代码可能会因版本不匹配而
阅读全文
posted @
2025-03-07 10:04
chester·chen
阅读(1036)
推荐(3)
dotnet-trace 分析.net程序性能
摘要:在现代 .NET 开发中,性能分析和故障诊断是确保应用程序稳定性和高效性的关键步骤。 本文将介绍如何使用 dotnet-trace 工具进行 .NET Core 应用的性能跟踪,并结合 PerfView 和 Speedscope 等可视化工具,深入理解应用的运行状况。 一、dotnet-trace
阅读全文
posted @
2025-05-17 14:24
chester·chen
阅读(1234)
推荐(6)
使用Microsoft Agent Framework构建C# AI代理
摘要:本文介绍如何使用Microsoft Agent Framework在C#中构建生产级AI代理,涵盖环境设置、内存管理、工具及多代理工作流。本框架旨在替代AutoGen和Semantic Kernel,提供更好的上下文管理和代理协调。 What Is Microsoft Agent Framework
阅读全文
posted @
2026-03-22 08:54
chester·chen
阅读(922)
推荐(1)
让 AI 代理拥有"专业技能包":Microsoft Agent Skills
摘要:本文介绍如何使用Agent Skills为Microsoft代理框架中的代理提供可重用的领域专业技能包。通过.NET和Python内置技能提供者,代理可以在运行时动态加载所需技能,增强其能力而无需修改核心指令。 Introduction to Agent Skills 您现在可以在Microsoft
阅读全文
posted @
2026-03-23 08:24
chester·chen
阅读(854)
推荐(1)
Microsoft Agent Framework Skills 执行 Scripts(实战指南)
摘要:在 Microsoft Agent Framework 中,Agent Skills 是一个非常重要但容易被忽略的能力。它可以让你的 Agent 拥有“插件化能力”,甚至可以执行本地脚本(如 Python),实现真正的自动化。 本文结合完整示例,带你从 原理 → 结构 → 实战 → 坑点 全面掌握如
阅读全文
posted @
2026-03-24 09:00
chester·chen
阅读(922)
推荐(1)
用 Microsoft Agent Framework 构建 SubAgent(Multi-Agent)
摘要:本文演示如何用 Microsoft Agent Framework 用 Executor + Workflow(DAG)模式实现 SubAgent(子代理)架构。通过示例代码(来自项目的 txt)展示并发 Fan‑Out/Fan‑In 的实现、消息路由与聚合策略,最后讨论最佳实践与权衡。 假定读者等
阅读全文
posted @
2026-03-26 09:03
chester·chen
阅读(749)
推荐(3)