Anduin Xue
Anduin Xue

Anduin's Tech Blog

All Posts


Publish app from Azure DevOps to non-global Azure like Azure CN

本篇博客讲述了如何使用Azure DevOps将编译完成的应用发布到非Azure Global环境,例如Azure CN。虽然在Azure全球环境中发布应用非常简单,但在某些情况下,客户可能会使用其他Azure环境,如Azure Arc、Azure政府版和Azure CN。文章详细介绍了如何在这些非全球环境中发布应用。 首先,需要创建一个新的应用注册,并允许Azure DevOps以应用的身份发布应用。然后,为新注册的应用添加一个密钥,并将应用添加到订阅级别角色,以便在订阅范围内管理资源。接下来,在Azure DevOps中添加一个新的服务连接,并选择手动配置以设置自定义的Azure环境名称。 在配置服务连接时,需要填写订阅ID、订阅名称、服务主体ID、密钥和租户ID。这些值可以在订阅详细信息标签页和Azure AD详细信息页面中找到。填写完所有必要信息后,单击验证并保存按钮。 最后,可以在管道上工作并将应用发布到此服务连接。本文通过详细的步骤和截图为读者展示了如何实现这一目标。那么,在面对非全球Azure环境时,是否还会感到困惑呢?或者这篇文章是否为您提供了一个全新的解决方案?快来阅读全文,探索更多有关Azure DevOps和非全球Azure环境的知识吧!--GPT 4

Azure App Service Azure Azure DevOps DevOps Azure CN China

Linux Cheatsheet for Windows Users

本篇博客为Windows用户提供了一份Linux操作的速查表,内容包括程序和服务管理、软件包管理、服务管理、更新、启动时自动运行命令、文本编辑、Tmux、Screen、Steam CMD等方面的知识。文章还提供了一些快速提示,如如何计算代码的总行数、获取CSharp文件的总行数、获取启动时间、获取关机事件、找出最长的C#文件等。此外,文章还介绍了如何使用Git仅添加非空白更改、测试磁盘写速度、通过SSH测试传输速度、在不使用wget的情况下下载文件并显示下载的文件等操作。最后,还提供了一些有趣的命令,如在不触及磁盘的情况下加热CPU、获取新的UUID并转换为base64、获取随机4个数字、持续播放当前文件夹下的随机视频等。如果您是一位Windows用户,希望更好地掌握Linux操作,那么本篇博客将会对您有所帮助。在阅读本文后,您是否能更熟练地使用Linux进行各种操作呢?请尝试回答这个问题并探索更多有关Linux的知识。--GPT 4

bash Linux Ubuntu

How to write a bot for Kahla

本篇博客讲述了如何使用Kahla.SDK编写一个Kahla机器人。首先,确保已安装.NET Core SDK。接下来,创建一个新的控制台.NET Core应用,然后为Kahla.SDK添加依赖项。接着创建一个新的C#类,继承`BotBase`类并重写默认的`OnMessage`方法。修改`Program.cs`以启动机器人,然后执行命令以启动机器人。在启动机器人后,使用另一个帐户与之交谈即可。 除此之外,博客还提供了关于依赖注入和高级启动的额外信息。Kahla.Bot支持自定义启动配置,修改`Program.cs`以使用高级启动,并创建一个名为`StartUp`的新类。通过这个类,可以添加自己的服务和配置全局设置。 这篇博客为你提供了一个简单易懂的教程,帮助你编写自己的Kahla机器人。现在,你是否已经跃跃欲试,想要创建一个自己的机器人?你会如何利用这些知识去创造一个有趣且实用的机器人呢?--GPT 4

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

Creating a Model for an existing database in Entity Framework Core (DB First)

本文详细介绍了如何在Entity Framework Core中为现有数据库(如SQL Server和MySQL)创建模型(数据库优先)。首先,安装EF(dotnet-ef)工具和相关依赖项。然后,为现有的SQL Server数据库创建一个干净的.NET项目,并使用`dotnet ef dbcontext scaffold`命令反向生成数据库的模型。在命令中,需要填写正确的数据库连接字符串。此外,还可以通过参数`-t TableNameOrViewName`来只反向生成特定表或视图的模型。 对于现有的MySQL数据库,操作步骤类似,可以参考MySQL官方文档中的示例。需要注意的是,使用MySQL时务必使用.NET 5.0,否则可能会出现问题。在完成反向生成后,可以根据需要升级项目。 请注意,在创建模型后,每次更改模型时都需要使用迁移命令来保持数据库与模型的同步。本文提供的方法和示例能帮助你快速地为现有数据库创建模型,从而更好地利用Entity Framework Core进行数据操作。那么,你是否已经准备好尝试这些方法来为你的数据库项目创建模型呢?--GPT 4

C# Entity Framework SQL Server Database Entity Framework Core LINQ

Sync data to database with Entity-Framework Core

本篇博客介绍了如何使用Entity-Framework Core同步数据到数据库。通常,我们可以简单地使用`_dbContext.MyDbSet.Add(myObject)`将数据添加到数据库。但在某些情况下,数据库中可能已经存在一些数据,我们需要删除过时的数据并尝试添加缺失的数据。 文章通过一个具体的例子展示了如何实现数据同步:假设我们有一组数字`1, 1, 2, 2, 3, 3`,而数据库中的数据为`1, 1, 1, 5`。我们需要将数据库中的数据更新为我们期望的数据,即删除第一个`1`和`5`,然后插入`2, 2, 3, 3`。这个过程被称为`DbSet.Sync()`。 首先,我们需要在内存中声明我们需要的数据源模型,然后声明一个新的接口`ISyncable<T>`,并实现该接口。这样可以使数据库源可以映射到实体。接下来,我们需要编写一些扩展方法,允许同步数据。具体实现过程可以参考博客中的示例代码。 最后,在完成上述步骤后,你可以简单地同步你的数据。例如,我们可以使用以下代码将数据同步到数据库: ```csharp var targetCollection = (new int[] { 1, 1, 2, 2, 3, 3 }) // The data you want to sync to database. .Select(t => new MyDataSourceNumber { ValueInMemory = t }) .ToArray(); _dbContext.Numbers.Sync(targetCollection); await _dbContext.SaveChangesAsync(); ``` 使用`Sync`方法,你无需关心具体的过程。它会自动删除过时的数据,并将数据库中的数据更新为你输入的数据,从而实现最小化的数据变更。例如,如果你现有的数据是`2, 3, 4`,它将删除数据`4`并将`1, 1, 2, 3`插入到数据库中。 那么,如何确保我们的数据同步过程更加高效和准确呢?在实际应用中,我们可能需要考虑更多的因素和场景,以满足不同的需求。--GPT 4

C# Entity Framework Database Data Sync

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

本文主要讲述了如何在C#中获取腾讯云直播的推流地址和观看地址。由于腾讯云官方只提供了Java和PHP的代码示例,作者首先研究了Java代码中txTime参数的含义,发现其实际上是从1970年到现在的总秒数。接下来,作者通过计算MD5、拼接字符串和转换十六进制等操作,使用C#实现了获取安全URL的功能。 在代码实现中,首先定义了一些常量,包括腾讯云直播的推流域名、播放域名、密钥等。然后,通过GetSafeUrl方法计算安全URL,其中涉及到将日期时间转换为Unix时间戳、计算MD5等操作。最后,将推流地址、观看地址等信息输出到控制台。 通过本文的介绍,读者可以了解到如何在C#环境下实现获取腾讯云直播的推流地址和观看地址的功能,从而在实际项目中实现对接腾讯云直播的需求。那么,除了腾讯云直播,还有哪些其他直播平台可以实现类似功能呢?如何选择适合自己项目的直播解决方案?希望读者在阅读本文后,能够对这些问题有所启发。--GPT 4

C# .NET Core Tencent Cloud Live Streaming China

Get an ideal flight simulator free based on X-Plane 11 (Free plugins)

本文介绍了一款基于X-Plane 11的免费飞行模拟器,以及一系列免费插件,帮助玩家获得更加真实的飞行体验。首先,文章推荐了Zibo 737飞机模型,该模型具有高度真实的飞行性能和系统。接下来,文章介绍了一系列免费插件,包括AviTab、Terrain Radar、BetterPushBack、HeadShake camera plugin、XTouchDownRecorder、Airport Navigator、Xsquawkbox和X-RASS。这些插件分别提供了平板电脑式的航图显示、地形雷达功能、自动推出系统、摄像头抖动效果、着陆评分记录、机场导航、在线飞行模拟网络和跑道警告系统等功能。通过这些插件,玩家可以获得更加真实、细腻的飞行体验。那么,这些插件是否能满足您对飞行模拟器的需求呢?快来一探究竟吧!--GPT 4

X-Plane Flight simulation Flight Plugins Plane Configuration Free

Tips to get better performance for Entity Framework Core

在这篇博客中,我们将探讨如何优化Entity Framework Core的性能。首先,当构建查询时,如果不需要查询中的所有内容,请使用IQueryable编写代码。如果查询已经构建完毕,且所有查询内容都是必要的,请立即将其转换为列表以避免进一步的IO操作。其次,当查询主键时,使用FirstOrDefault替换SingleOrDefault。由于SingleOrDefaultAsync会转换为“top 2”,而FirstOrDefaultAsync会转换为“top 1”,在主键查询中使用FirstOrDefault可以提高性能。 此外,如果不需要保存更改,请考虑添加AsNoTracking以提高查询性能。同时,尽量避免使用Include,因为它会生成复杂的SQL查询。只选择所需的数据,避免编写Include函数。当使用Select时,也可以省略.Include,因为它在这里不会产生任何效果。 最后,避免客户端评估,因为它会使EF从数据库查询所有数据,速度较慢。例如,在处理DateTime或TimeSpan的复杂计算时,先在代码中计算时间,然后构建查询。遵循这些建议,可以有效地提高Entity Framework Core的性能。 在优化Entity Framework Core性能的过程中,你是否遇到过其他问题?尝试过哪些方法来提高查询性能?请在阅读全文后与我们分享您的经验和看法。--GPT 4

Entity Framework SQL Performance Database

Scan all accessible class in C#

在本篇博客中,我们探讨了如何在C#中获取所有可访问的类。虽然通过调用`GetReferencedAssemblies`方法可以轻松获取到所有引用的程序集,但项目引用是递归的。为了获取所有的类,我们需要构建一个引用树并从整个树中读取。 博客提供了一个名为`ScanAssemblies`的方法,该方法接收一个`Assembly`类型的参数,并返回一个包含所有引用程序集的可枚举集合。通过遍历引用的程序集并递归调用`ScanAssemblies`方法,我们可以构建出完整的引用树。 为了获取所有可访问的类,我们需要加载这些程序集。博客给出了一个名为`AllAccessiableClass`的方法,它首先获取入口程序集,然后调用`ScanAssemblies`方法并对返回的程序集集合进行去重。最后,通过`SelectMany`方法获取每个程序集中的类型并将其添加到一个列表中。 在阅读这篇博客后,你将了解如何在C#中获取所有可访问的类并构建引用树。但在实际应用中,还有哪些场景需要获取所有可访问的类呢?如何优化这个过程以提高性能?希望这篇博客能为你提供一些启示,并引导你自己寻找答案。--GPT 4

C# .NET Core Reflection

Use IIS or Azure App Service as a reverse proxy

In this blog post, we explore the process of setting up a reverse proxy using IIS or Azure App Service. Reverse proxies are beneficial for hiding the origin server's identity and improving performance, security, and load balancing. Before configuring the reverse proxy, it's essential to install IIS and the necessary extensions, such as RequestRouter and Rewrite. Once installed, enable the proxy settings in the IIS management tools and create a new reverse proxy rule by configuring domain bindings and HTTPS certificates. Creating a web.config file under the site root path is crucial for adding rules, such as redirecting HTTP traffic to HTTPS and setting up the real reverse proxy logic. The blog post provides a detailed example of setting up a reverse proxy for Aiursoft.IO and a simpler example for Google.com. To further enhance security, the HSTS feature can be enabled by adding specific code to the web.config file. For deploying the reverse proxy server to Azure App Service, simply ...--GPT 4

IIS web.config Reverse Proxy Web Azure App Service Azure

Share view component between different ASP.NET Core web project

在本篇博客中,我们将探讨如何在不同的ASP.NET Core Web项目之间共享视图组件。当C#中的某些逻辑可以在多个项目之间共享时,我们通常会创建一个新的类库项目。但有时我们只想共享一些视图组件,例如,在`Aiursoft`的所有页面中,它们都包含一个`Logout`组件。多次编写这个组件显然是没有意义的。那么我们如何共享它呢? 首先,我们需要创建一个新的`.NET Core`类库项目,并将其命名为`Aiursoft.Pylon`。接下来,确保你的共享类库支持Razor。修改`csproj`文件以添加属性: <AddRazorSupportForMvc>true</AddRazorSupportForMvc> 现在,你的`Aiursoft.Pylon`项目已经支持编写Razor类库了。我们可以开始编写一个新的视图组件。将所有视图组件放在`Views/Shared/Components`文件夹下。要编写视图组件,请参考以下文档: [https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components) 完成视图组件编写后,你的文件夹应如下所示: ![](/image/img-22d1ae24-0e8c-4abd-b970-214b6fe25b45.png) 现在你的视图组件已经完成,可以在多个项目之间共享了。接下来,创建一个引用你的类库的新Web项目。 ![](/image/img-5f7db548-fe96-43da-962d-016ec2904d62.png) 现在我们将从类库中导入所有视图组件到新的Web项目。修改`_ViewImports.cshtml`以添加类似如下的命名空间: ![](/image/img-1cf766d4-bdb7-4f73-bf12-03732a5c7286.png) 现在你可以在视图中使用共享的视图组件了。如下所示: ![](/image/img-64ede323-6c78-4d7f-833c-cca2bcd60228.png) 如果你的代码以深绿色显示,那么一切正常,你的视图组件可以成...--GPT 4

ASP.NET Core C# class library View component

One command to pull all git repositories

在这篇博客中,我们将探讨如何用一条简单的命令来更新所有的git仓库。如果你的文件夹结构类似于文章中所示,那么这个方法将非常适用。首先,在工作空间文件夹下创建一个名为`pull.sh`的新文件,并将文章中的代码复制到文件中。接下来,执行一个命令以允许运行该脚本。完成这些操作后,每次启动计算机时,只需运行`./pull.sh`,所有仓库便会自动更新。 这个方法不仅节省了时间,还让你在开始工作前确保所有仓库都是最新的。那么,你还在等什么呢?尝试这个方法,让你的工作流程变得更加高效。最后,你是否还有其他类似的技巧来简化日常任务?--GPT 4

bash git