Anduin Xue
Anduin Xue

Anduin's Tech Blog

All Posts in 2021


Auto backup for Minecraft on Linux

This blog post discusses the process of creating an automatic backup solution for a Minecraft server hosted on Linux. The author first explores the Git solution, which consumes a lot of CPU resources when compressing objects, potentially impacting the game's performance. Due to these issues, the Git solution was abandoned. The author then moves on to the copy solution, which involves copying the world folder to another location. To implement this, the author uses tmux to run the Minecraft environment. The blog post provides step-by-step instructions on how to start tmux and run the Minecraft server within it, as well as how to exit and resume the terminal. Next, the author shares a script named backup.sh that automates the backup process. The script saves the game, copies the world folder to a backup location, removes older backups if necessary, and then resumes the game. The author suggests using a background job system like crontab to run the script and enable automatic backups. H...--GPT 4

bash Linux Minecraft Backup

Validate an object in any C# projects

本篇博客详细介绍了如何在C#项目中使用对象验证,以确保输入模型的有效性。文章首先讲解了如何在纯C#环境中使用验证,通过复制一个简单的函数来实现。接着,文章展示了如何在类定义中为属性设置验证规则,如:Required、MinLength和Range等。然后,文章讨论了如何在代码中使用这些验证规则,以及如何根据验证结果输出相应的错误信息。 在某些情况下,系统提供的验证规则可能无法满足特定需求。因此,文章还介绍了如何创建自定义验证属性。例如,验证属性不包含空格或换行符。通过创建一个自定义的验证属性类,我们可以实现这一需求。最后,文章提供了一个完整的示例代码,演示了如何在项目中使用对象验证功能。 在阅读本篇博客后,你是否对C#项目中的对象验证有了更深入的了解?文章中的示例代码是否能帮助你更好地理解如何使用和自定义验证规则?在你的项目中,是否有其他需求需要自定义验证属性来实现?如何利用本文介绍的方法来优化你的项目代码?--GPT 4

ASP.NET Core C# .NET Validation

在一秒钟内打开苏康码

在这篇博客中,我们探讨了如何在一秒钟内打开苏康码,摆脱支付宝和微信小程序的繁琐。首先,我们通过访问苏州公安局的官方网站获取苏康码,然后将获取到的URL复制到手机并固定到桌面。这样,当需要出示健康码时,可以快速打开。此外,我们还讨论了这种方法是否合法,以及是否可以在电脑上完成。结果发现,这种方法是合法的,因为我们仍然通过正常渠道获取健康码。同时,这个方法也可以在电脑上完成,为那些手机没电的情况提供了便利。 但是,这篇文章中介绍的方法已经失效,作者正在寻找替代方案。那么,有没有其他方法可以更快速地打开苏康码呢?在未来,我们是否能够找到更便捷的方式来展示我们的健康码,以减轻生活中的不便?期待你的探索和发现!--GPT 4

Web China Health Code

C# Play with GZip.

本篇博客详细介绍了如何使用C#编写一个扩展类,为字符串添加GZip压缩功能。首先,我们需要将给出的代码复制到项目中。代码包括使用System、System.IO、System.IO.Compression和System.Text命名空间,并定义了一个名为GZipExtensions的静态类。该类包含两个私有静态方法:Zip和Unzip,分别用于压缩和解压字符串。此外,还有两个扩展方法:UnZipBase64和ZipToBase64,它们分别将GZip压缩后的字符串转换为Base64编码,以及将Base64编码的压缩字符串解压缩。 当需要使用这些功能时,只需调用扩展方法即可。博客中提供了一个示例,展示了如何使用ZipToBase64和UnZipBase64方法压缩和解压缩一个字符串,并通过断言验证了压缩和解压缩后的字符串相同,以及压缩后的字符串长度确实减小。 这篇博客为我们提供了一个实用的C#扩展类,用于处理字符串的GZip压缩和解压缩。这种功能在处理大量文本数据时尤为有用,可以帮助我们节省存储空间和网络传输时间。但是,这篇博客还留下了一个有趣的问题:如何进一步优化这个扩展类,以提高压缩和解压缩的性能?这个问题值得我们深入思考和探讨。--GPT 4

C# .NET Compress GZip Base64

Directly talk to any enterprise Microsoft Teams user

在这篇博客中,我们发现可以直接与任何 Microsoft Teams(工作或学校)用户进行交流。在开始之前,您需要安装 Microsoft Teams(工作或学校)并使用工作或学校帐户登录。要购买它,请参考 Microsoft 365:[比较 Microsoft 365 企业计划](https://www.microsoft.com/en-us/microsoft-365/compare-microsoft-365-enterprise-plans)。 要找到一个人,方法非常简单。首先,您需要获取他的电子邮件地址。例如:[anduin@aiursoft.com](mailto:anduin@aiursoft.com)。然后,您将拥有以下地址:[https://teams.microsoft.com/l/chat/0/0?users=](https://teams.microsoft.com/l/chat/0/0?users=)。现在,您有了类似这样的链接:[https://teams.microsoft.com/l/chat/0/0?users=anduin@aiursoft.com](https://teams.microsoft.com/l/chat/0/0?users=anduin@aiursoft.com)。直接打开它,现在您就可以与他交谈了。 要找到一个机器人,方法与找人类似。前缀是:https://teams.microsoft.com/l/chat/0/0?users=28:(guid)。本文向您展示了如何轻松找到并与 Microsoft Teams 用户(包括机器人)进行交流。这种交流方式能否提高您的工作效率和沟通质量呢?在实际应用中,这种方法是否具有广泛的适用性和便利性呢?欢迎您阅读全文,发现更多有趣的内容并自行探索答案。--GPT 4

Microsoft Teams Microsoft 365

Use Windows as a stateless OS on your devices

本篇博客详细讲解了如何在设备上将Windows作为无状态操作系统使用。文章提供了一系列PowerShell脚本,用于优化和自定义Windows设置,包括更改桌面图标、禁用睡眠模式、启用中文输入法、移除蓝牙图标、调整文件资源管理器设置、设置时区和时间、调整鼠标速度、固定文件夹到快速访问、启用深色主题、清理桌面、设置网络连接属性以及启用远程桌面连接等。此外,文章还介绍了如何使用winget命令升级所有应用程序以及检查并安装Windows更新。 在阅读本文后,您是否会考虑使用这些脚本来优化您的Windows设备?这些设置对您的日常使用有何影响?在实践中,您还需要哪些其他自定义设置?请阅读全文,了解如何借助这些脚本让您的Windows设备更符合您的需求,并尝试自己寻找答案。--GPT 4

PowerShell Windows Windows 11 Automation Configuration Device Reimage

Why you should never use `Console.WriteLine`

本文讨论了为什么在编写库代码时应避免使用`Console.WriteLine`,并提供了一些替代方案。使用`Console.WriteLine`会将库与标准输出紧密耦合,并假设调用代码关注标准输出。然而,如果库代码被单元测试套件或使用不同日志记录范例的Web服务器调用,情况将会如何? 根据依赖反转原则,高级模块不应该依赖于低级模块,而应该依赖于抽象(如接口)。此外,抽象不应该依赖于细节,细节(具体实现)应该依赖于抽象。控制台是应用程序依赖的低级模块,而日志记录是与业务相关的高级模块。因此,日志记录不应该依赖于控制台,而应该有一些抽象,如`ILogger`接口,它描述了可以提供日志记录服务的对象。 使用`Console.WriteLine`的原因有以下几点: - 无法确保控制台始终被消费和阅读。 - 需要重建项目以支持更多日志记录服务,如文件、ApplicationInsights、数据库日志记录。 - 应该遵循依赖反转原则,不依赖于低级模块,如`Console.WriteLine`。 - GUI应用程序无效,但可能提供其他日志记录窗口,如输出窗口。 - 控制台日志记录在扩展服务器端应用程序时难以跟踪和诊断。 - 难以为日志设置级别、时间戳和来源。 解决方案包括: - 使用`ILogger`代替`Console` - 使用`ILogger`的各种方法,如`ILogger.LogInformation`、`ILogger.LogCritical`等。 本文还讨论了如何获取实现`ILogger`接口的控制台日志记录器,并提供了相关的代码示例。此外,还介绍了如何在不使用依赖注入的情况下获取日志记录器的最小代码。 最后,本文指出,在某些特定情况下,可以使用`Console`类,例如构建一个终端用户界面应用程序,该应用程序永远不希望标准输出流被重定向到控制台之外的地方,或者在实现支持控制台日志记录的`ILogger`时。--GPT 4

C# .NET Core Console App .NET Logging ILogger

Install Windows store app with WinGet

This blog post demonstrates how to install a Microsoft Store app using WinGet, a Windows package manager. The process begins by obtaining the Store App ID from the Microsoft official website. Once the App ID is acquired, you can use a command to open the store page or create a PowerShell script to launch the store automatically. To install the app without a prompt, first, install WinGet using a provided script, and then run another command with the store app ID. For developers building automation, this blog post also provides a script to check if the app is already installed using the exact WinGet app name. If it's not installed, the script attempts to download and install the app. A function called Install-StoreApp is provided, making it even easier to install Microsoft Store apps with WinGet. Examples of using this function with various app IDs and WinGet app names are also included. How can you adapt these scripts for your own automation needs? And what other applications can be...--GPT 4

PowerShell Windows Winget Microsoft Store UWP Store

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

本篇博客文章介绍了如何在不使用USB驱动器的情况下,与现有操作系统并行安装Windows 11。首先,需要获取Windows 11的ISO文件并找到其中的Install.wim(或Install.esd)文件。接下来,在计算机上创建一个新的、干净的分区,用于安装新的Windows系统。然后,提取install.wim(esd)文件到新分区,并为新Windows添加启动项。最后,重启计算机,在启动菜单中选择新安装的操作系统即可。 在完成这个过程的过程中,你可能会遇到一些问题。例如,如何选择正确的Windows版本进行安装?如何确保新分区足够大以容纳新的操作系统?如何正确地将install.wim(esd)文件提取到新分区?以及如何确保新分区能够正常启动新的操作系统?本文详细解答了这些问题,并提供了相应的解决方案,如使用7zip打开install.wim(esd)文件,查找适合的Windows版本;使用磁盘管理工具创建新分区;以及使用命令行工具(如dism和bcdedit)完成文件提取和添加启动项等操作。 在阅读本文后,你将能够顺利地完成Windows 11的并行安装,无需依赖USB驱动器。但在实际操作过程中,你可能还会遇到其他问题,如何解决这些问题?尝试阅读全文,从中找到答案。--GPT 4

Windows 10 PowerShell Windows Windows 11 Install DISM Bcdedit Boot BCD

Retry with exponetial back-off on C#

本篇博客介绍了如何在C#中构建一个简单的重试引擎,使用指数退避算法来增加重试间隔。重试引擎的核心功能是在给定任务失败时,根据预设条件进行重试,直到达到最大尝试次数或任务成功完成。 博客中提供了一个RetryEngine类,其主要方法RunWithTry接受一个任务工厂、重试次数、错误处理条件以及超时时间作为参数。在执行任务时,若任务失败并满足重试条件,引擎会根据指数退避算法计算出一个等待时间并在此时间后进行重试。若达到最大尝试次数仍未成功,将抛出异常。 指数退避算法的实现在ExponentialBackoffTimeSlot方法中,通过计算2的次方来获取最大等待时间,并在此范围内随机选择一个时间作为实际等待时间。 在业务代码中,只需创建一个RetryEngine实例并调用RunWithTry方法即可实现任务的重试功能。例如,本文中给出了一个使用重试引擎执行网络请求的示例。 通过本文的介绍,您可以了解如何在C#中实现一个简单的重试引擎,并掌握指数退避算法的基本原理。但在实际应用中,可能还需要根据具体业务需求对重试引擎进行调整。那么,在您的项目中,如何根据实际情况调整重试策略呢?如何在保证任务成功执行的同时,避免过多的重试导致系统资源浪费?期待您的思考和实践。--GPT 4

C# .NET Retry

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

本文介绍了一种解决玄学问题的方法——夹逼调试法。玄学问题指的是那些在正常情况下能够正常工作,但在某些特定环境下无法正常工作的问题。夹逼调试法的核心思想是通过两个方向共同限制作用,使得问题根源的可能范围集中在最小化的条件变化中。具体操作方法包括构建一个理想环境,然后逐一对比出现问题的环境和理想环境之间的差异,通过调整这些差异,观察问题是否得到解决,从而找到可能导致问题的原因。 需要注意的是,夹逼调试法只能找到可能的原因,而不是必要、充分或充分且必要的条件。因此,该方法适用于需要快速定位可能原因的情况。本文还通过两个实际问题,详细演示了如何运用夹逼调试法进行问题定位和解决。在解决问题的过程中,我们可以发现夹逼调试法具有一定的实用性和效率,对于解决那些难以预料的因素导致的问题具有一定的参考价值。那么,在面对类似的玄学问题时,你是否会尝试运用夹逼调试法来寻找问题的根源呢?--GPT 4


The simplest way to retry in PowerShell

本篇博客详细介绍了如何在PowerShell中使用简单的方法进行重试操作。这种方法主要利用了do-try-catch-until语句,当执行某个具有较高崩溃概率的操作时,可以自动进行重试操作。在示例中,作者使用ping命令来演示这种重试机制。当ping失败时,程序会捕获到异常,并根据已尝试的次数来决定是否继续重试,直到成功或达到最大尝试次数。 在这个过程中,我们可以看到程序会在每次重试前输出当前尝试次数以及接下来的等待时间。这有助于我们了解程序的运行状态,同时可以根据需要调整等待时间。当达到最大尝试次数后,程序会抛出错误,并在日志中记录详细信息。 那么,如何使用这种重试机制来优化我们的脚本呢?在什么场景下这种重试机制会发挥最大作用?如何根据实际需求调整重试次数和等待时间?这篇博客为你提供了一个简单易懂的示例,帮助你更好地了解PowerShell中的重试机制。阅读全文,你将能够找到这些问题的答案,并学会如何在自己的PowerShell脚本中应用这种重试方法。--GPT 4

PowerShell Retry

时评:国家对于子女教育方面的政策还需要多方面配套

本文讨论了国家在减轻学生作业负担和校外培训负担方面的政策,以及针对未成年人过度网络游戏、消费行为的制度建设。文章指出,现行政策虽然在一定程度上降低了家长的育儿压力,但仍存在诸多问题。例如,仅仅禁止课外培训活动和加强游戏监管,并不能引导学生投入有意义的事情;同时,可能会导致家长寻求地下黑市交易教育资源,助长黑市交易,甚至可能会有机构选择在境外开展培训教育。 文章建议,国家应该有配套政策来引导学生合理利用空闲时间,并从根本上解决家长养育压力的问题。例如,通过政策性调整,增加体育活动和社会实践的占比,让学生在课余时间学习乐器、演唱、绘画、雕塑等多样化课程。然而,实际操作中可能会遇到诸如学校人文教学能力不足、偏远地区教育资源不平等等问题。 此外,政策调整可能会对一些行业产生不利影响,如教育培训业。文章建议在实施前,可以考虑在一些教育资源充分的省市设立试验区,提前适应新模式,并给投资人和相关行业的企业留出充分的时间思考转型等。 那么,如何在保护未成年人的同时,平衡各方利益?如何让学生在课余时间投入有意义的事情,从而真正减轻家长的育儿压力?这些问题值得我们进一步思考。--GPT 4

China Politics Education

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

本篇博客介绍了如何在C#中查询Kusto(Azure数据资源管理器)并获得强类型结果。首先,需要安装Kusto客户端,然后构建一个抽象类作为Kusto响应行。接下来,创建一个名为“KustoRepository”的新类,并在其构造函数中构建一个新的KustoClient。为了获取应用ID和应用密钥,需要在Azure AD中注册应用并允许其访问Kusto客户端。然后构建查询函数,该函数将查询结果转换为强类型的列表。 建议将查询函数与缓存服务、重试引擎和`Task.Run()`进行包装,以提高性能、可靠性和代码风格。最后,在需要使用查询功能时,只需创建一个具有预期响应行类型的新类,然后使用查询函数即可。 本文提供了一个详细的示例,包括创建抽象类、KustoRepository类和查询函数的实现。通过阅读本文,读者可以了解如何在C#中实现对Kusto数据库的查询,并将查询结果转换为强类型数据。这种方法可以提高代码的可读性和可维护性,同时也可以方便地扩展到其他类型的查询。请问这种方法在实际项目中的应用有哪些优势?如何根据实际需求调整查询函数以满足不同场景的需求?--GPT 4

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

Build a common cache service for your C# app.

本篇博客介绍了如何为C#应用程序构建一个通用的缓存服务。文章详细讲解了如何使用CacheService类实现缓存功能,以及如何通过QueryCacheWithSelector方法进行缓存查询。同时,博客还提供了一系列测试用例来展示该缓存服务在不同场景下的表现。 在阅读本文后,你将了解到如何利用C#中的CacheService类实现缓存功能,以提高应用程序的性能。文章还探讨了如何利用选择器(selector)来实现更灵活的缓存策略,以及如何通过条件参数来控制缓存的行为。此外,博客还探讨了如何处理空值和缓存失效的情况。 那么,在构建C#应用程序时,如何确保缓存服务的高效运行?如何根据不同场景选择合适的缓存策略?如何在保证性能的同时,确保数据的准确性和实时性?阅读本文,你将找到答案。--GPT 4

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

Restore a deleted branch from Azure DevOps using it's SDK

本篇博客详细介绍了如何使用Azure DevOps SDK来恢复一个已删除的分支。首先,需要确保Git客户端已配置。接下来,在项目中安装Azure DevOps SDK。博客提供了用于恢复已删除分支的代码示例,其中包括了创建GitPushSearchCriteria对象、获取推送信息、创建GitRefUpdate对象以及调用UpdateRefsAsync方法来恢复分支。 在成功执行恢复分支的代码后,可以在本地运行`git fetch`命令,恢复的分支将会出现在本地仓库中。本文提供了一种简便的方法来恢复已删除的分支,这对于在意外删除分支后进行恢复非常有帮助。然而,在实际操作中是否能够顺利恢复取决于多种因素,例如分支的复杂性、项目的大小等。那么,除了使用Azure DevOps SDK,还有其他方法来恢复已删除的分支吗?如何确保在恢复分支的过程中不会引入潜在的问题?对于这些问题,希望读者能够在阅读本文的过程中思考并找到答案。--GPT 4

C# git Azure Azure DevOps SDK

Tips about rules setup for Outlook enterprise users

In this blog post, we discuss how to set up rules in Outlook for enterprise users, helping them manage and organize the thousands of emails they receive daily. With the proper rules in place, users can ensure they never miss important emails while also focusing on group mailboxes and automatically sorting emails into different folders based on their usage. To begin, it's essential to learn how to use the Outlook app to manage rules. A helpful resource for this can be found at [How to set a rule where my name is not in To or Cc field in Outlook? (extendoffice.com)](https://www.extendoffice.com/documents/outlook/4636-outlook-rule-where-my-name-is-not-in-to-cc.html). The blog post then shares a personal configuration for creating rules, which should be set up in a specific order: 1. Clean some useless content by moving emails from specific senders to designated folders, stopping further rule processing after moving. 2. Alert focused content by moving emails containing specific project ...--GPT 4


软件工程领域中的逆全球化趋势

在过去的二十年,全球化在软件工程领域取得了长足的发展,然而近年来,逆全球化的趋势逐渐浮现。在这篇博客中,我们将探讨这种趋势背后的原因以及它如何影响我们构建和维护软件的方式。 在全球化的背景下,我们曾经认为构建的应用应该越来越“全球化”,即应用能够全球布局,全球服务。然而,随着近年来国际间政治局势的变化,人与人之间的不信任逐渐加剧,客户对网络和互联网耦合的服务产生了不信任。这种不信任导致了软件工程领域的逆全球化趋势。 在逆全球化的趋势下,我们不能无条件地将整个地球视为一个可以进行数据最终一致性的分区。考虑到许多国家的军队、机关、科研等都逐步面向私有网络和空气墙的模式,我们在尝试面向这些客户时,也必须考虑在完全本地的部署情况下应用的维护与运行。这意味着我们需要重新思考软件的构建和维护方式,以适应这种新的趋势。 容忍空气墙(AirGap)是这种新趋势下的一个关键问题。在面对这种情况时,我们可能需要考虑将私有云打包提供给客户,甚至将一整个系统,连带一整套有完整维护、更新、管理经验的组织结构一起交给他。这可能会产生截然不同,甚至是如今无法想象的合作模式:未来销售软件,销售的不再是光盘,不再是程序,而是销售的人,销售的组织结构。 虽然站在2021年的视角来看,这种逆全球化的操作还非常疯狂,但现实往往正是这样。在这样的背景下,我们需要重新审视我们构建和维护软件的方式,以适应这种不断变化的世界。那么,我们将如何应对这种逆全球化趋势,以确保软件工程能够继续发展和繁荣呢?这是一个值得我们深入思考和探讨的问题。--GPT 4

Multi-tenant China Software Development AirGap

Build a package that can be used in browser and node with TypeScript

本篇博客详细介绍了如何使用TypeScript构建一个可在浏览器和Node.js中使用的包。首先,我们需要安装必要的依赖,如terser-webpack-plugin、ts-loader、typescript、webpack和webpack-cli。接着,在项目中创建tsconfig.json文件,配置TypeScript编译选项。然后,在项目中创建一个名为src的文件夹,并在其中放置.ts文件。示例中展示了一个名为DisableWith的类,并将其导出为默认导出。 接下来,我们需要在项目的根目录下创建webpack.config.js文件,配置Webpack以便将TypeScript代码打包成UMD格式的库。在生产模式下,我们还会使用terser插件对包进行优化。最后,别忘了修改package.json文件,指定库的入口文件。 通过运行`npm run build`命令,我们可以构建项目,并在dist文件夹中生成相应的文件。然后,可以通过一个简单的示例来测试生成的库。最后,我们将项目发布到npm,使用户可以通过`npm install`命令安装我们的包,并在他们的项目中使用。 整个过程详细介绍了从项目创建到发布的每个步骤,为那些希望使用TypeScript构建库的开发者提供了很好的参考。在阅读本文后,你是否已经掌握了如何使用TypeScript构建可在浏览器和Node.js中使用的包?有没有什么可以改进的地方?欢迎阅读全文并进行深入探讨。--GPT 4

Web npm TypeScript node webpack JavaScript Front-end

Use Azure Key Vault to store connection strings for App Service.

This blog post discusses the use of Azure Key Vault to store connection strings for App Service, providing a secure way to manage sensitive information without compromising access control. Azure Key Vault is a tool designed to safeguard cryptographic keys and other secrets used by cloud apps and services. The article guides you through the process of creating a new Azure Key Vault, adding yourself as an administrator, and storing the production connection string. Once the secret is created, the reference URL is copied and wrapped using the @Microsoft.KeyVault() function. This wrapped URL is then pasted into the app service, replacing the real password. After saving the new value and restarting the app service, an identity is added to allow the app service to access the key vault. By using Azure Key Vault, you can manage your app service without touching confidential values and invite others to help manage it without revealing sensitive information, such as database passwords. This se...--GPT 4

Azure App Service Azure Security Key vault

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

在这篇博客中,我们将学习如何使用.NET Core和SSH.NET库编程地连接到远程服务器并执行命令。这对于构建服务器管理工具非常有用,尤其是当需要远程连接到Ubuntu服务器时。 首先,创建一个新的.NET Core项目,然后安装最新的SSH.NET库。接下来,编写一段使用SSH.NET库连接到远程服务器并执行命令的代码。示例中的代码将连接到远程服务器并运行`apt upgrade`命令。运行应用程序后,将自动连接到远程服务器并执行该命令。 SSH.NET库还有许多其他用途,可以查看其文档以了解更多信息。通过本文的示例,你将能够更好地理解如何使用.NET Core和SSH.NET库远程连接和管理服务器。在实际应用中,你可能需要根据自己的需求调整代码以满足不同的场景。 那么,你是否有兴趣尝试使用SSH.NET库来简化远程服务器管理呢?或者你是否有其他方法来实现类似的功能?让我们一起探讨吧!--GPT 4

C# .NET Core bash Linux SSH

Use JetBrains code quality analyzer to prevent checking-in bad C# code

在本博客中,我们将探讨如何使用Azure DevOps和JetBrains代码质量分析器自动检查C#代码质量并拒绝包含不良代码的Pull Requests。首先,我们需要安装JetBrains代码质量检查器,然后将其添加到构建管道中。在构建任务后和测试任务前插入此任务,以确保在没有构建项目的情况下不会引发问题。并选择合适的严重性级别,以便在检测到无效代码时使管道失败。 对于GitHub Actions,我们也可以轻松地将其应用到GitHub Actions中,只需参考给出的yaml代码即可。此外,我们还需要在本地检查代码质量并生成报告。虽然购买ReSharper是最好的方法,但我们还是可以免费使用代码质量检查工具。通过运行给出的命令,可以在本地安装语法检查工具并运行检查。 为了调整检查级别或抑制警告,我们可以创建一个.editorconfig文件并添加相应的规则。通过参考给出的链接,我们可以查询.editorconfig的所有级别属性。如此一来,我们就拥有了一个完整的C#代码质量自动检查解决方案,而且是免费的!祝您编码愉快!在这个过程中,你有没有想过如何根据项目需求调整代码质量检查标准?或者如何在本地生成详细的代码质量报告以进行调试和优化?--GPT 4

C# Azure DevOps JetBrains Resharper Code Quality Pipelines