Make .NET Great Again

obviously impossible

Run Clash With Docker Desktop

创建docker-compose.yml version: '3.9' services: clash: container_name: core image: dreamacro/clash volumes: - ./config.yaml:/root/.config/clash/config.yaml:ro ports: - "7890:7890" # proxy port(change port to your config.yaml) - "9090:9090" # api port(change port to your config.yaml) restart: always yacd: container_name: web_ui image: haishanh/yacd ports: - "80:80" # change port which you want depends_on: - clash restart: always 启动 把你的clash配置文件 config.yaml 和 docker-compose.yml 放入同一个文件夹 然后执行 docker compose up -d 启动 打开 http://localhost:<your_yacd_exposed_port> 进入web UI 可以管理切换clash的节点和代理模式 设置系统代理 在 系统设置 -> 网络和Internet -> 代理 -> 手动设置代理 中填写clash暴露的http端口...

July 9, 2022

Visual Studio 2022 插件推荐

引言 插件可以提高开发人员的生产力,好的插件可以让开发事半功倍,下面推荐一些自己用的 Visual Studio 插件(免费!) 插件列表 以下所有插件在 Visual Studio 2022 运行正常,若版本不兼容请移步 Visual Studio Marketplace 查看是否有对应版本 插件名称 描述 CodeMaid VS2022 代码清理插件,其中有一个码锹窗口深得我心 Output enhancer 输出窗口使用彩色优化,错误为红色,警告为黄色等 Code alignment 代码对齐,让你的某些代码按照某个字符垂直对齐 Double-Click Maximize 2022 双击最大化,不用先拖出来再放大,再次双击即可回归原位 Time Stamp Margin 2022 在调试窗口左边增加一列时间戳 Shrink Empty Lines 2022 压缩空行和没有字符的行(只有括号的行)的高度,从而在屏幕上显示更多代码 Solution Error Visualizer 2022 当某个文件有错误或者警告时,在解决方案资源管理器中显示(其父目录也会显示) Match Margin 2022 在滚动条上显示当前选中单词的位置

July 7, 2022

如何在 ASP.NET Core WEB API 中启动后台任务

引言 有时候我们可能想在接口中开启一个后台任务,就像这样: public class MyController : Controller { private readonly MyDependency _dep; public MyController(MyDependency d) { _dep = d; } public IActionResult MyAction() { Task.Run(() => _dep.DoHeavyAsyncWork()); return Json("Your job is started!"); } } 事实上,这段代码很符合语义,接口也能成功返回。 但是其中有一个潜在问题,随着return语句响应本次请求,ASP.NET Core会开始释放本次请求的依赖,比如控制器和控制器依赖的各种服务……,这就会导致Task.Run语句中的所依赖的定义在控制器中的服务会被释放掉,这可能会导致一些未知的问题。这些潜在问题可能会让你的应用程序随时爆炸! 让后台任务拥有自己的生存期 为了保证后台服务的依赖不随控制器释放而释放,我们需要定义一个新的服务并将其注册为单例服务,因为单例服务永远不会被释放。 创建一个名为CannonService的类 CannonService.cs public class CannonService { private readonly ILogger<CannonService> _logger; private readonly IServiceProvider _serviceProvider; public CannonService(ILogger<CannonService> logger, IServiceProvider serviceProvider) { _logger = logger; _serviceProvider = serviceProvider; } public void Fire(Delegate dg, Action<Exception>?...

June 27, 2022

Create Redis Cluster by Docker Compose

Create a docker-compose.yml version: "3.9" services: redis-1: image: redis:7.0.2-alpine container_name: redis-1 ports: - "6371:6371" - "16371:16371" volumes: - ./node-1/data:/data - ./node-1/conf/redis.conf:/etc/redis/redis.conf networks: redis: ipv4_address: 172.28.0.11 command: - "redis-server" - "/etc/redis/redis.conf" redis-2: image: redis:7.0.2-alpine container_name: redis-2 ports: - "6372:6372" - "16372:16372" volumes: - ./node-2/data:/data - ./node-2/conf/redis.conf:/etc/redis/redis.conf networks: redis: ipv4_address: 172.28.0.12 command: - "redis-server" - "/etc/redis/redis.conf" redis-3: image: redis:7.0.2-alpine container_name: redis-3 ports: - "6373:6373" - "16373:16373" volumes: - ./node-3/data:/data - ./node-3/conf/redis.conf:/etc/redis/redis.conf networks: redis: ipv4_address: 172....

June 21, 2022

Css Integrity Error When Load Hugo Publish

问题描述 近日我使用 hugo 构建了我的博客,并通过 Github Action 将其发布在 Github Pages 上,刚开始还是很美好的,但是过一短时间以后打开页面发现样式全无,使用浏览器的开发者工具查看资源获取没有问题,但是在控制台却出现了这样一句话: Failed to find a valid digest in the 'integrity' attribute for resource '***' with computed SHA-256 integrity '***'. The resource has been blocked. 寻找原因 我在 MDN 上寻找到了关于 integrity 的定义,大概描述就是这是一个签名,浏览器获取到相应资源后会用相同的方法计算一个签名,只有签名相同时才会加载对应的资源,如果两个签名不一致则是文件完整性被破坏(文件发生了改变)。 问题来了,整个发布过程是由 Github Action 全自动操作的,没有人为干预,文件为何会无缘无故改变呢? 答案是 Cloudflare。 Cloudflare 中默认会开启静态资源的缓存来提高网站的加载速度,可是为什么缓存会改变文件呢?缓存并不会改变文件,在 Cloudflare 的 Speed > Optimization 中有一个叫 Auto Minify 的选项,描述如下: Reduce the file size of source code on your website. Note: Purge cache to have your change take effect immediately....

June 20, 2022

Code Snippets in VSCode

Introduction VSCode(Visual Studio Code) is a code editor redefined and optimized for building and debugging modern web and cloud applications. Code Snippets is a piece of code, the editor will auto complete a specific code when developer type some specific prefixes. Custom Code Snippets VSCode has many built-in code snippets, so I won’t go into details here, but mainly talk about how to customize code snippets. There are two types of code snippets, one is global and the other is workspace, the difference between them is that the scope and storage location....

June 19, 2022

软件推荐

以下是我本人平时喜欢用的软件,排名不分先后 名称 描述 类型 7-Zip 压缩软件 desktop Fiddler HTTP 抓包工具 desktop Git 代码管理软件 cli,desktop Google Chrome 顶级浏览器 desktop MPC-HC 视频播放器 desktop MSI Afterburner 性能监视超频软件 desktop MacType Windows 字体渲染 desktop OBS Studio 推流工具 desktop PowerToys Windows 小工具集合 desktop Sourcetree 代码管理软件 desktop ToDesk 远程桌面工具 desktop Virtual Audio Cable 音频管理软件 desktop Visual Studio Code 吃饭的家伙 desktop Visual Studio 吃饭的家伙 desktop Voicemetter Banana 音频管理软件 desktop WinHex 文件查看工具 desktop WinSCP 文件复制工具 desktop WinaeroTweaker Windows 工具 desktop WireShark 网络抓包工具 desktop Wiztree 磁盘分析工具 desktop dnSpy ....

June 16, 2022