Anduin Xue
Anduin Xue

Anduin's Tech Blog

All Posts in 2021.9


Why you should never use `Console.WriteLine`

本文探讨了在库代码中使用`Console.WriteLine`的潜在问题及其替代方案。文章指出`Console`类与标准输出的强耦合特性会导致库代码与业务逻辑的依赖混乱——当库被单元测试框架或Web服务器调用时,控制台输出可能完全失效违背依赖倒置原则。通过引入`ILogger`接口抽象层可实现日志系统的解耦,使日志记录与具体输出方式分离。实际应用中可通过`Microsoft.Extensions.Logging`框架构建可扩展的日志体系:通过依赖注入注册日志服务后,开发者可动态切换控制台日志、文件日志或Application Insights等不同输出方式,同时支持日志分级和格式化功能。文章通过代码示例演示了如何通过服务集合配置日志系统,并指出即使不使用依赖注入框架也能通过`LoggerFactory`快速创建控制台日志实例。值得注意的是在终端UI应用或自定义日志实现器等特定场景下,`Console`类仍可作为直接交互工具。那么当你的应用需要同时处理多租户日志时,如何设计日志上下文关联机制?当服务器集群规模扩大时,控制台日志是否仍然能胜任分布式追踪需求?这需要开发者重新思考日志系统的架构设计边界。--Qwen3

C# .NET Core Console App .NET Logging ILogger

Install Windows store app with WinGet

这篇文章揭示了如何通过WinGet在Windows 11系统上实现Microsoft Store应用的自动化安装。传统依赖图形界面的安装方式被一条命令打破——通过解析特定格式的ProductId(如9nblggh5r558),开发者可以构建PowerShell脚本直接跳转至应用商店页面。更深层的技术突破在于,作者展示了如何利用WinGet的源管理能力,通过指定msstore源并配合--accept-package-agreements参数,实现真正意义上的无交互式安装。这种自动化方案对系统部署和软件管理具有革命性意义,它让我们思考:当应用安装变成可编程操作时,操作系统本身的可配置性将如何演变?文中提供的Install-StoreApp函数不仅封装了安装逻辑,更引入了应用存在性检测机制,这种自适应安装架构是否预示着未来软件分发的新范式?技术爱好者或许会好奇:这种命令行方式是否能突破Windows生态的限制?当脚本可以自动获取应用标识符时,软件分发的边界将如何重新定义?--Qwen3

PowerShell Windows Winget Microsoft Store UWP Store

Install Windows 11 side-by-side without a USB drive

This article presents a method to install Windows 11 alongside an existing system without relying on USB drives or optical discs by directly extracting the install.wim file into a new partition. The process bypasses traditional boot media and leverages built-in tools like DISM and BCDedit to create a dual-boot setup where the original OS remains accessible. By unpacking the Windows image to a dedicated NTFS partition (created via disk management or shrinking existing volumes), users can generate a bootable system that coexists with their current installation. The guide emphasizes critical steps such as selecting the correct image index for the desired edition, avoiding BitLocker encryption, and configuring boot entries to ensure the new OS is recognized during startup. While this approach offers a streamlined alternative to conventional installation methods, it raises intriguing questions about the boundaries of OS deployment: Can this technique be adapted for Linux or other operating ...--Qwen3

Windows 10 PowerShell Windows Windows 11 Install DISM Bcdedit Boot BCD

Retry with exponetial back-off on C#

本文介绍了一个基于C#实现的指数退避重试引擎设计与实现其核心通过动态计算等待时间在多次失败后自动触发重试机制代码中通过递增的幂次方随机数生成回退间隔时间并结合超时控制与异常过滤策略为开发者提供了灵活的重试解决方案该引擎允许通过when参数自定义重试条件并支持异步任务执行与超时熔断机制在实际应用中开发者可以将其封装到网络请求或分布式任务中以应对临时性故障但如何平衡重试次数与系统负载?当重试策略与业务场景的关联性增强时是否需要引入更智能的决策模型?当异常类型复杂化时如何设计更精准的过滤规则?这些问题都值得在构建可靠系统时深入思考--Qwen3

C# .NET Retry Retry Engine Exponential Backoff Exception Handling

找到玄学问题的根源的方法 - 夹逼调试法

夹逼调试法是一种通过双向环境对比快速定位玄学问题根源的系统方法。当程序在理想环境能正常运行而在特定环境异常时该方法通过构建理想环境与故障环境的对比集合逐步逼近问题核心先在故障环境向理想环境靠拢过程中观察差异因素的影响再反向从理想环境向故障环境逼近验证假设从而缩小问题范围。该方法特别适用于环境依赖性强的异常场景例如网络配置操作系统版本软件冲突等复杂因素交织的情况。通过Spotify无法运行的案例展示了如何通过对比操作系统版本网络环境软件来源等差异最终发现Windows N版与专业版的兼容性问题在飞机启动故障案例中则通过开关状态的双向验证锁定关键控制因素。这种方法的优势在于将模糊的环境差异转化为可验证的变量组合但需注意其结果仅指向可能原因而非绝对因果。当面对类似"为什么我的代码在本地运行正常却在服务器报错""为什么同样的配置在不同设备表现不一致"等问题时能否通过构建理想环境和差异分析找到突破口?或许这个方法能成为你调试玄学问题的利器。--Qwen3

Software Development Debugging Problem Solving Computer Science Environment Analysis System Issues