Anduin Xue
Anduin Xue

Anduin's Tech Blog

.NET Core


Why you should never use `Console.WriteLine`

这篇文章详细探讨了为什么在现代软件开发中不建议在库代码中使用`Console.WriteLine`,并提出了替代方案。文章指出,`Console.WriteLine`存在以下问题:1)在图形界面应用中无法正常工作;2)违反依赖反转原则;3)缺乏灵活性和扩展性。为了应对这些问题,作者推荐使用`ILogger`接口,并通过依赖注入框架(如Microsoft.Extensions.DependencyInjection)来实现日志记录的灵活配置和管理。 文章详细介绍了如何通过添加必要的NuGet包(如`Microsoft.Extensions.Logging.Console`、`Microsoft.Extensions.Logging.ApplicationInsights`等),并结合服务注册与配置,快速搭建一个可扩展的日志系统。此外,作者还展示了如何通过最少代码实现基本的日志功能,并讨论了在某些特殊场景下可以继续使用`Console`类的情况。 文章最后提出一个问题:“是否真的不能在任何情况下使用`Console`类?”引发读者进一步思考。--DeepSeek

C# .NET Core Console App .NET Logging ILogger

Query Kusto database with C# and get result as List<T>.

本文介绍了如何通过C#连接并查询Azure Kusto数据库的方法。首先,文章演示了如何创建Kusto连接、定义查询语句并执行查询操作,并展示了如何处理查询结果以及建议使用异步方法以提高性能。接着,文章详细说明了如何将数据从集合格式转换为DataTable格式,并利用Kusto的Ingest API将其导入到目标表中。文中通过具体的C#代码示例,分别介绍了KustoIngestService类(用于数据导入)、DataTableExtensions类(用于将对象集合转换为DataTable)以及Program类(用于演示完整的数据导入流程)。最终,文章通过一个完整的工作流展示了如何从数据准备到成功将数据导入Kusto表的全过程。--DeepSeek

C# .NET Core Azure .NET Kusto Azure Data Explorer KQL

Build a common cache service for your C# app.

该代码展示了如何为缓存功能编写单元测试,涵盖了基本缓存、带条件的缓存、空值处理、缓存清除以及选择器的应用。每个测试方法使用不同的数据点和场景来验证缓存的行为,包括首次加载时的慢响应时间、命中缓存后的快响应时间,以及对特定条件和边缘情况(如空值)的正确处理。这些测试确保了缓存机制在各种情况下都能正常工作,并覆盖了常见的缓存应用场景。--DeepSeek

ASP.NET Core C# .NET Core Performance Caching .NET Cache MemoryCache

Programmatically connect to the remote server via SSH and execute remote command.

本博客介绍了一种通过编程方式使用SSH协议连接远程服务器并执行命令的方法。作者分享了使用.NET Core和SSH.NET库实现这一目标的具体步骤,包括创建新的控制台项目、安装必要的依赖库以及编写连接和执行命令的代码示例。文章还展示了运行结果,并提供了进一步探索的方向和资源链接。通过本文,读者可以学习如何自动化管理服务器任务,同时思考是否可以将此方法扩展到更多系统或更复杂的操作中。你是否也想尝试用代码远程控制服务器?或者你认为这种方法还能应用在哪些场景中呢?--DeepSeek

C# .NET Core bash Linux SSH Renci.SshNet

Display code coverage information for .NET Core project using Azure DevOps.

本文介绍了在 Azure DevOps 中为 .NET Core 项目显示代码覆盖率信息的详细步骤。首先需要创建一个构建管道,并根据使用的经典设计器或 YAML 文件添加相应的命令行任务。确保在 Windows 平台上运行以获得最佳支持效果。完成配置后,构建完成后即可查看代码覆盖率和测试结果。文章还展示了如何生成并嵌入-badge URL_到项目文档中,方便团队直观了解项目的代码覆盖率情况。如果你也在使用 Azure DevOps 和 .NET Core 进行开发,不妨尝试一下这些步骤,看看你的项目能达到怎样的代码覆盖率?又或者,你可以思考如何通过改进测试覆盖率来提升代码质量?--DeepSeek

.NET Core Azure DevOps .NET Test MSTest Integration Test Code coverage GitHub

ASP.NET Core Integration Test using MSTest

这篇文章探讨了如何在ASP.NET Core项目中使用MSTest进行集成测试,而不仅仅是依赖官方文档中提供的xunit示例。作者通过实际步骤展示了如何替换xunit并配置MSTest来完成相同的任务。文章首先介绍了从项目结构中移除xunit并安装MSTest的过程,接着详细说明了如何在测试项目中启动ASP.NET Core服务器,并使用HttpClient进行请求测试。最后,作者强调了测试清理的重要性,确保每次测试后正确停止和释放服务器资源。这篇文章不仅为读者提供了一种替代方案,还激发了读者思考为什么选择MSTest而非xunit,以及在实际应用中可能需要注意哪些问题。通过阅读本文,读者可以深入了解如何灵活配置不同的测试框架,并在自己的项目中实现高效的集成测试。--DeepSeek

ASP.NET Core C# .NET Core Test MSTest Functional Test Integration Test

Get unique random numbers in C#

该文章提出了一种利用RSA加密原理生成唯一随机整数的方法。作者通过分解大数N为两个质因数p和q,计算出私钥指数d,使得每个输入i经过模幂运算后得到的结果都是唯一的。这种方法确保了生成的随机数在指定范围内既不重复又覆盖所有可能值。文章详细解释了各个函数的作用,包括分解大数、验证参数有效性以及生成随机数序列,并提供了测试代码来验证方法的有效性,确保每个随机数的唯一性和正确性。--DeepSeek

C# .NET Core Algorithm Random Numbers Unique random Non-repeat Random

HTTP post file from .NET Core new HTTP client

本文介绍了在 .NET Core 3 中使用新的 HTTP 客户端上传文件的方法。通过 `MultipartFormDataContent` 类,可以轻松处理多部分表单数据,实现文件上传。文章提供了代码示例,展示了如何创建 `MultipartFormDataContent` 对象、添加文件流以及发送 POST 请求。此外,还讨论了与传统表单 URL 编码内容的区别,并强调了使用新客户端的优势。你是否也遇到了需要在 .NET Core 中上传文件的需求?了解这些步骤后,你是否能想到更多优化上传过程的方法?--DeepSeek

ASP.NET Core C# .NET Core HTTP Web File HTTP Client POST

How to write a bot for Kahla

这篇文章介绍了如何使用Kahla.SDK库为Kahla平台编写聊天机器人。通过简单的步骤,你可以快速创建一个基本的机器人并运行它。文章详细展示了从安装.NET Core SDK到编写机器人逻辑的整个过程,并提供了代码示例来帮助你理解如何实现消息处理和依赖注入等功能。此外,文章还提到了一些高级功能,如自定义启动配置,以满足更复杂的需求。最后,作者邀请读者通过实际操作探索更多可能性,例如创建更复杂的机器人或深入了解Kahla平台的其他特性。那么,你准备好开始编写自己的聊天机器人了吗?--DeepSeek

C# .NET Core Aiursoft Kahla Bot Kahla.SDK Kahla App Console App

C#获取腾讯云直播的推流地址和观看地址

这篇文章介绍了如何通过C#代码实现腾讯云直播的推流地址和观看地址的获取。面对腾讯云官方文档中仅提供Java和PHP示例的情况,作者通过逆向分析和尝试,最终成功编写了C#代码来完成这一功能。文章详细解释了关键参数txTime的含义(自1970年至今的总秒数),并展示了如何通过MD5加密算法生成安全链接。代码部分包括获取推流地址和播放地址的实现,其中推流地址使用RTMP协议,而播放地址则支持多种格式如FLV和M3U8。文章最后还提供了完整的C#代码示例及其运行效果,帮助读者快速理解和实现类似功能。你是否也想通过C#实现腾讯云直播的推流和播放?不妨按照本文的方法尝试一下,并思考如何根据实际需求调整代码参数来生成符合自己项目要求的地址。--DeepSeek

C# .NET Core Tencent Cloud Live Streaming China Tencent Cloud Live

Scan all accessible class in C#

在C#编程中,获取所有可访问类是一个看似简单却涉及递归引用和程序集处理的实际问题。文章通过代码示例展示了如何利用`GetReferencedAssemblies`方法构建一个引用树,并递归遍历每个程序集以收集所有类型信息。其中,关键在于避免重复加载相同的程序集,确保最终结果的唯一性和准确性。文章还探讨了从入口程序集开始扫描的实现细节,以及如何将这些程序集中的所有类型提取到列表中供进一步使用。这种方法虽然有效,但在实际开发中可能会遇到哪些潜在问题?例如,在大型项目或动态加载场景下,这种递归扫描是否仍能保持高效和稳定?这些问题值得深入思考和探索。--DeepSeek

C# .NET Core Reflection Type Retrieval Assembly Scanning GetReferencedAssemblies

Inject an instance of a class with all default values

该工具能够自动生成对象实例并填充属性值,支持基本类型、自定义类及其数组和列表形式。它通过检测数据类型的特性(如是否为集合、枚举或抽象类)来动态创建合适的数据。对于自定义类,会调用构造函数生成实例,并为每个可写属性递归地赋默认值;如果是集合,则根据元素类型生成包含多个实例的数组或列表。最终,通过反向继承层次结构生成数组或列表,确保复杂对象结构的完整性。--DeepSeek

C# .NET Core Automation DependencyInjection ObjectCreation PropertiesHandling