Anduin Xue

let today = new Beginning();

All Posts


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

FFmpeg 用法概览

本篇博客概括了FFmpeg的用法,包括视频转码、硬件加速、直播推流、整合视频和音频、修改视频分辨率、调整视频速度、剪取视频的一段时间、用ffmpeg扣取一个视频区域、反转视频等。文章详细介绍了每个操作的命令和参数,并给出了示例。此外,博客还推荐了SRS项目和flv.js,用于搭建直播平台和在网页里加载FLV直播流。通过阅读本文,您将了解如何使用FFmpeg进行各种视频操作和直播推流,实现类似Bilibili直播的播放体验。那么,您准备好尝试这些功能了吗?或许您可以思考如何将这些技能应用到您的项目中,为观众带来更好的观看体验。--GPT 4

bash FFmpeg

C# run tasks in a threads pool with fixed size

在本文中,我们将探讨如何在C#中使用固定大小的线程池运行任务。首先,我们提供了一个`CannonQueue`类,该类使用`SafeQueue`来存储待处理的任务,并使用`RunTasksInQueue`方法来并行执行这些任务。为了能够动态地向任务池中添加任务,我们修改了`QueueNew`方法,使其在添加任务时重新启动引擎。同时,我们还提供了一个`QueueWithDependency`方法,以便在需要访问诸如数据库或HTTP之类的依赖项时保持依赖项处于活动状态。 最后,我们展示了如何注册`CannonQueue`作为单例依赖项,并如何在实际应用中使用该服务。例如,我们可以使用`QueueNew`方法将下载任务添加到队列中,并利用`RunTasksInQueue`方法并行执行这些任务。此外,我们还可以使用`QueueWithDependency`方法来处理具有依赖关系的任务,例如使用Entity Framework的任务。 那么,如何在实际应用场景中高效地利用这个线程池呢?本文提供的方法是否足够满足您的需求,还是需要进一步优化?在实际开发过程中,可能会遇到哪些挑战和问题?希望这篇文章能够启发您的思考,帮助您找到解决方案。--GPT 4

C# Async Task Multi-Threading

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

本文介绍了如何在.NET Core项目中使用Azure DevOps显示代码覆盖率信息。首先,需要在Azure DevOps中创建一个构建管道。对于使用经典设计器的用户,需要添加一个新的.NET Core命令行步骤,并确保发布测试结果。在参数输入中,插入:--configuration $(buildConfiguration) --collect "Code coverage"。对于使用YAML的用户,添加任务:DotNetCoreCLI@2,并使用相应的输入参数。 请注意,始终使用Windows平台运行构建,不要在Linux上运行,因为代码覆盖率生成器尚不支持Linux。保存并运行管道后,可以在构建完成时查看代码覆盖率和测试结果。在本文的示例中,代码覆盖率为87%。 要获取徽章URL,首先复制URL中的以下部分。复制URL的三个部分,如示例中的A、B和C。然后复制以下markdown文本:![Azure DevOps coverage](https://img.shields.io/azure-devops/coverage/{{A}}/{{B}}/{{C}})。将A、B和C更改为复制的值,如:![Azure DevOps coverage](https://img.shields.io/azure-devops/coverage/aiursoft/Star/5)。将其保存在readme.md中。 完成上述步骤后,即可在.NET Core项目中显示代码覆盖率信息。这样的功能对于开发者来说,无疑是一个很好的辅助工具,可以更好地了解代码的覆盖情况,提高代码质量。那么,如何更好地提高代码覆盖率呢?这将是一个值得思考的问题。--GPT 4

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

ASP.NET Core Integration Test using MSTest

在官方文档中,仅有一个使用xunit进行ASP.NET Core集成测试的示例。但如果你不喜欢xunit呢?我们能否用MSTest替换它?答案是可以的。 首先,卸载xunit并安装MSTest。清理项目结构,然后为测试项目安装MSTest。接下来,在测试项目中启动服务器。在测试项目下创建一个名为`BasicTests.cs`的新类。将以下代码放入基本测试中,当测试开始时,它将自动启动一个新的ASP.NET Core Web服务器,并使用来自主Web项目的Startup。 接下来,添加一个简单的测试。在测试类中插入一个新功能。在这个新测试中,你将请求测试服务器并检查结果。现在你可以运行测试了!在Visual Studio中,或者在解决方案文件夹下执行`dotnet test`。 最后,考虑测试清理。在测试之后,你应该停止服务器以防止影响其他测试。只需停止并释放服务器即可完成工作。 本文讨论了如何使用MSTest替换xunit进行ASP.NET Core集成测试,并提供了详细的步骤。那么,使用MSTest进行集成测试是否能带来更好的测试效果?在实际应用中,MSTest和xunit之间的性能差异如何?这些问题留给读者自己探索和找到答案。--GPT 4

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

Fire and forget in ASP.NET Core with dependency alive

在C#中,实现fire and forget非常简单,只需使用Task.Run(() => FireAway())。然而,在ASP.NET Core控制器中,这种方法可能并不合适。当我们在控制器中触发一个耗时的任务,任务将作为fire-and-forget成功启动。但在处理HTTP响应后,控制器可能会被释放,这意味着依赖项可能不再存在,因此任务可能无法完成。 为了在触发任务时始终保持依赖项处于活动状态,我们需要创建一个新的服务来包含它,这个新服务必须是单例的,因为单例服务永远不会被释放。我们需要在服务中获取依赖项,而不是在控制器中,因为控制器的生命周期依赖于HTTP上下文,而单例服务则不依赖。 创建一个新类CannonService,并在StartUp.cs的ConfigureServices方法中将其注册为单例。在控制器中使用时,只需将CannonService注入到控制器中,然后调用一个依赖于某些耗时操作的函数。这个方法不会阻塞当前线程,可以直接向客户端返回结果,而发送器在发送邮件时始终保持活动状态。 作者已将上述代码发布为一个Nuget包。你可以在这里查看源代码:[Aiursoft.Canon](https://gitlab.aiursoft.cn/aiursoft/canon/-/tree/master),也可以在这里下载包:[Nuget.org](https://www.nuget.org/packages/Aiursoft.Canon/)。 这篇博客分享了在ASP.NET Core中实现fire and forget的方法,以及如何确保依赖项在任务执行过程中保持活动状态。那么,你是否考虑过在自己的项目中使用这种方法来优化性能呢?--GPT 4

ASP.NET Core C# Async Fire and forget

How to serialize JSON object in C# without Newtonsoft Json

本篇博客介绍了如何在C#中不使用Newtonsoft.Json库进行JSON对象的序列化和反序列化。在某些情况下,我们可能无法访问`Newtonsoft.Json`包,例如当不同的包使用不同版本的库时,可能会导致构建过程中的版本冲突。这通常发生在一些非常大的项目中。 本文提供了一个名为`MyJsonConverter`的静态类,其中包含两个方法:`Serialize`用于将对象序列化为JSON字符串,`Deserialize`用于将JSON字符串反序列化为对象。这个类使用了`System.Runtime.Serialization.Json`命名空间中的`DataContractJsonSerializer`类来实现序列化和反序列化。 通过这个类,我们可以像使用`Newtonsoft.Json`一样简单地进行JSON操作。示例代码创建了一个名为`Book`的简单类,并使用`MyJsonConverter`将其序列化为JSON字符串,然后将该字符串反序列化为`Book`对象。运行结果显示序列化和反序列化均成功。 这篇博客提供了一个在不依赖`Newtonsoft.Json`的情况下进行JSON操作的替代方案。那么,在实际项目中,我们是否应该放弃使用`Newtonsoft.Json`呢?这个问题值得我们深入思考。--GPT 4

C# JSON .NET Newtonsoft.Json

Enable PowerShell remoting for Windows Server machines

本篇博客主要讲述了如何在Windows Server上启用PowerShell远程功能。就像在Linux机器上使用SSH执行远程命令一样,你也可以在目标Windows Server上执行远程PowerShell命令。博客提供了详细的步骤,包括使用自签名证书启用HTTPS远程功能、配置监听地址以及在本地机器上通过PowerShell连接到服务器。 首先,我们需要在服务器上执行一系列命令来移除旧的监听器、创建自签名证书并启用HTTPS远程功能。接下来,在本地机器上执行命令来跳过CA检查(因为我们使用的是自签名证书),然后输入服务器的计算机名、SSL选项、端口号、会话选项和凭据。之后,系统会提示输入密码。 如果一切顺利,你将成功连接到服务器。但如果无法连接,可能是因为端口被阻止了。此时,可以在服务器上执行命令来解除端口阻止。 本文详细介绍了在Windows Server上启用PowerShell远程功能的方法,以及如何解决可能遇到的问题。那么,你是否已经准备好尝试这些操作,实现在Windows Server上的远程PowerShell功能呢?--GPT 4

PowerShell Windows Server Remote Management WMI

Best-practice for authentication after creating a new Linux server

在这篇博客中,我们探讨了在创建新的Linux服务器后进行身份验证的最佳实践。文章详细讲述了如何确保服务器的安全性,包括使用SSH密钥、创建强密码以及限制不必要的服务等方面。同时,博客还提供了一些实用的命令和技巧,帮助读者轻松地完成身份验证过程。在阅读本文后,您将了解到如何在创建新的Linux服务器后实施有效的身份验证策略,以确保服务器的安全和稳定运行。 文章引发了一些有趣的问题,例如:如何在不同的Linux发行版中实现类似的安全策略?如何确保在云环境中部署的Linux服务器同样安全?以及在遇到攻击时,如何快速识别并采取相应的防范措施?这些问题将激发读者思考更多关于Linux服务器安全的话题,并可能引导他们深入研究相关领域。 在阅读这篇博客时,希望您能够思考如何将这些最佳实践应用到自己的服务器环境中,以及如何根据实际需求调整这些建议。最后,您是否认为这些最佳实践足以确保服务器的安全,还是需要进一步探索其他方法来增强服务器的防护能力?我们期待您在阅读全文后,找到这些问题的答案。--GPT 4

bash Linux Ubuntu SSH

Setup auto-renew wildcard HTTPS certificate on Azure virtual machine

本文详细介绍了如何在Azure虚拟机上设置自动续订通配符HTTPS证书。首先,需要在Azure DNS服务中创建一个新的资源组,并将域名服务器地址复制到记事本中。然后,在域名提供商处修改域名服务器的值。接下来,创建一个新的Azure虚拟机,并在其上安装IIS。为了获取证书,可以使用win-acme自动工具,它可以自动完成申请、验证和安装步骤。在此过程中,还需要创建一个新的应用程序注册,并为其分配相应的权限。最后,应用通配符HTTPS证书,并设置DNS记录以将任何子域指向服务器。完成这些步骤后,您的网站将使用HTTPS进行加密。本文提供了详细的操作步骤和截图,帮助您更轻松地完成设置过程。在完成设置后,您的在线服务将更加安全可靠。那么,自动续订通配符HTTPS证书对您的业务有何影响?如何确保在整个过程中不会出现问题?--GPT 4

Azure Azure DNS Windows Server HTTPS Win-ACME Certificate letsencrypt ACME

C# Rotate the square matrix

In this blog post, a C# solution is presented for rotating a square matrix, a problem that the author encountered during an interview. The provided code demonstrates a straightforward approach to this problem by defining two methods: Rotate and RotateItem. The Rotate method is responsible for iterating through the matrix and calling the RotateItem method for each element, while also handling the padding to ensure that the inner matrix is rotated correctly. The RotateItem method, on the other hand, takes care of swapping the elements in the matrix to achieve the desired rotation. By sharing this solution, the author aims to help fellow developers who may face a similar problem in the future. The code is easy to understand and can be used as a reference or starting point for further exploration of matrix manipulation techniques in C#. Readers are encouraged to study the provided code, try it out, and think about possible optimizations or alternative approaches to this problem. How would...--GPT 4

C# Algorithm Matrix Math

Creating a proxy to another URL with ASP.NET Core

本文讨论了如何在C#或ASP.NET Core中编写简单的HTTP代理逻辑,以及如何让您的项目代理请求到其他URL。这不是关于为您的ASP.NET Core项目部署代理服务器的内容。 首先,您需要明确您要代理的目标,这应该是一个URL。 在项目的任意位置添加以下代码: (此处省略代码示例) 这个方法将用户发送的`HttpContext.Request`转换为可重用的`HttpRequestMessage`,以便您将此消息发送到目标服务器。 在目标服务器响应之后,您需要将响应的`HttpResponseMessage`复制到`HttpContext.Response`,以便用户的浏览器直接获取到它。 (此处省略代码示例) 现在准备工作已经完成,回到我们的控制器: (此处省略代码示例) 尝试访问它,它将被代理到google.com。 (此处省略图片示例) 本文向您展示了如何在ASP.NET Core中实现简单的HTTP代理功能,通过这个代理功能,您可以将请求代理到其他URL。这将为您的项目带来更多的灵活性和扩展性。那么,您是否已经考虑在自己的项目中使用这种代理功能呢?如何有效地利用这个功能来改进您的项目呢?--GPT 4

ASP.NET Core Reverse Proxy Web Proxy