自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

walterlv - 吕毅

欢迎访问 https://blog.walterlv.com/ 热爱设计,不止是程序,更是艺术!

原创 使用 SetWindowCompositionAttribute 来控制程序的窗口边框和背景(可以做 Acrylic 亚克力效果、模糊效果、主题色效果等)

Windows 系统中有一个没什么文档的 API,SetWindowCompositionAttribute,可以允许应用的开发者将自己窗口中的内容渲染与窗口进行组合。这可以实现很多系统中预设的窗口特效,比如 Windows 7 的毛玻璃特效,Windows 8/10 的前景色特效,Windows...

2019-11-27 07:58:55 993 3

原创 通过设置启用 Visual Studio 默认关闭的大量强大的功能提升开发效率

使用 Visual Studio 开发 C#/.NET 应用程序,以前有 ReSharper 来不足其各项功能短板,后来不断将 ReSharper 的功能一点点搬过来稍微好了一些。不过直到 Visual Studio 2019,才开始渐渐可以和 ReSharper 拼一下了。 如果你使用 Visu...

2019-10-28 09:31:22 528 0

原创 .NET 将多个程序集合并成单一程序集的 4+3 种方法

编写 .NET 程序的时候,我们经常会在项目的输出目录下发现一大堆的文件。除了我们项目自己生成的程序集之外,还能找到这个项目所依赖的一大堆依赖程序集。有没有什么方法可以把这些依赖和我们的程序集合并到一起呢? 本文介绍四种将程序集和依赖打包合并到一起的方法,每一种方法都有其不同的原理和优缺点。我将介...

2019-08-30 15:03:48 476 0

原创 用命令行执行 .NET 单元测试时,如何仅执行符合某些条件的单元测试

本文介绍使用 dotnet test 命令进行单元测试的时候,过滤出被测项目中的一部分测试出来,仅测试这一部分。 @TOC 背景 建一个 .NET Core 的单元测试项目,例如项目名字是 Walterlv.Demo.Tests。举例其中的一个测试类如下: using Microsoft.Vis...

2020-05-25 16:17:14 89 0

原创 WPF 中如何绑定附加属性?XAML 中记得加括号,C# 中记得不能用字符串

在 XAML 中写绑定是 WPF 学习的必修课,进阶一点的,是用 C# 代码来写绑定。然而一旦绑定的属性是附加属性,好多小伙伴就会开始遇到坑了。 本文将介绍如何在 XAML 和 C# 代码中绑定附加属性。 @TOC 背景代码 开始遇到这个问题的背景是我定义了一个附加属性,然后试图通过绑定的方式完...

2020-05-25 16:10:01 87 0

原创 VSCode:当匹配到结果时,如何一次性全部选中操作(复制 删除)?

最近需要处理几十万行的文字,然后提取出数千行(嗯,我在做输入法词库)。在 VSCode 里我用正则匹配到了想要的结果后,如何能够快速把这些行提取出来呢? 其实非常简单,Alt + Enter 即可选中所有已经匹配到的文字。 来,我们看这个具体的例子: 这里有一个几十万行的词库,我需要将其中的英文...

2020-05-25 16:07:36 125 0

原创 Unity3D 入门:安装 Unity3D 并配置与 Visual Studio 的协作开发环境

实际上本文不看也罢,因为整个过程除了网速之外基本没啥坑。不过装完可能有一些配置,所以如果不知道的话可以参考本文。 @TOC 安装 我们共需要安装两款应用: Visual Studio 2019 及 Unity 编辑器组件 Unity Hub 这两款应用安装不分先后,不过建议全部都安装完后再启...

2020-05-25 16:04:08 54 0

原创 将 Windows Terminal 作为外部工具集成到其他工具 程序 代码中

Windows Terminal 在 Windows 上是一款 UWP 应用,然而其依然具有良好的与外部工具的集成特性,你可以在其他各种工具中配置使用 Windows Terminal 打开。 本文介绍如何配置使用 Windows Terminal 打开。 @TOC 命令行调用 在应用商店可以下...

2020-05-25 16:03:51 67 0

原创 Unity3D 入门:在 Visual Studio 里使用 Visual Studio Tools for Unity 全套工具

Visual Studio 安装过程中一起勾选的 Visual Studio Tools for Unity 提供了与 Unity 编辑器方便的交互功能,充分使用 Visual Studio Tools for Unity 可以提升一部分开发效率减少一点点坑。 @TOC Visual Studi...

2020-05-25 16:03:50 37 0

原创 在 Visual Studio 2019 (16.5) 中查看托管线程正在等待的锁被哪个线程占用

Visual Studio 2019 (16.5) 版本更新中带来了一项很小很难注意到却非常实用的功能,查看哪一个托管线程正在持有 .NET 对象锁。 如果你不了解这个功能如何使用,那么可以阅读本文。 @TOC 更新日志 Visual Studio 的官方更新日志中对此功能的描述: View ...

2020-05-25 16:03:45 66 0

原创 .NET WebClient 类下载部分文件会错误?可能是解压缩的锅

一直在使用 WebClient 下载文件,.NET 已经封装好,所以用起来代码非常简洁;但直到今天发现有一个文件一直不能正确下载下来。 本文介绍这个问题的原因和解决方法,更重要的是给出调查方法。 @TOC 本文所涉及到的域名已经过敏感信息处理,所以实际上你是无法访问到的;但这不影响本文对调查方法...

2020-05-25 16:03:43 32 0

原创 .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑

一般来说,大家在需要监听全局消息的时候会考虑 SetWindowsHookEx 这个 API。或者需要处理一些非自己编写的窗口的消息循环的时候,也会考虑使用它。 如果要知道如何使用这个 API,你可以在网上搜到大量这样的文章/博客/教程/文档,然而大多不会提及使用此 API 时遇到的一些坑。阅读本...

2020-05-25 16:03:43 31 0

原创 .NET 的静态构造函数是否线程安全?答案是肯定的!

今天有小伙伴在评估某类线程安全问题的时候,怀疑到静态构造函数里面去了。于是就有了本文。 @TOC 静态构造函数的执行时机 根据官方文档 Static Constructors - C# Programming Guide 所述: A static constructor is called a...

2020-05-25 16:03:39 64 0

原创 Unity3D 入门:为 Unity 的 C# 项目添加 dll 引用或安装 NuGet 包

因为 Visual Studio 有强大的包管理器插件,所以即便是不熟悉 NuGet 命令的小伙伴也能轻松安装和管理 NuGet 包。不过,对 Unity C# 项目来说,你并不能直接引用 dll,也不能直接使用自带的 NuGet 包管理器完成 NuGet 包安装。 本文介绍原因和真正的引用方法。...

2020-05-25 16:03:39 86 0

原创 WPF:无法对元素“XXX”设置 Name 特性值“YYY”。“XXX”在元素“ZZZ”的范围内,在另一范围内定义它时,已注册了名称。...

最近在改一段 XAML 代码时,我发现无论如何给一个控件添加 Name 或者 x:Name 属性时都会出现编译错误:无法对元素“XXX”设置 Name 特性值“YYY”。“XXX”在元素“ZZZ”的范围内,在另一范围内定义它时,已注册了名称。 @TOC 编译错误 编译时,出现错误: 无法对元素...

2020-05-25 16:03:36 42 0

原创 一点点从坑里爬出来:如何正确打开 WPF 里的 Popup?

在 WPF 中打开一个 Popup 并没有想象当中容易。虽说提供了一个 IsOpen 属性用于显示 Popup,但实际上造成的 Bug 会让你解得死去活来。Win32 的 WS_POPUP 也坑,不过 WPF 会额外再带来一些,所以本文只说 WPF。 @TOC 先说结论 本文一开始就贴出打开一个...

2020-05-25 16:03:34 33 0

原创 如何在终端和 PowerShell 中将一个命令自动重复执行多次

你可能有很多原因要将一个命令重复执行多次,本文介绍在多个平台下如何多次重复执行命令。 @TOC 背景 最近遇到一个偶然复现的单元测试错误,于是在每次运行时,打算重复运行多次来调查问题是否已经解决。 实际上,重复执行命令有更多用途: 通过重复执行来复现一些偶发的问题 执行一组命令,每次只有参数不...

2020-05-25 16:03:21 38 0

原创 设置用户无需密码自动登录到 Windows 系统

你一定要为你的 Windows 用户账户设置密码,一来会安全一些,而来可以远程登录使用;但有时出于一些特殊的目的,不希望在每次开机后都必须输入密码才能进入系统。于是你可以使用本文提供的方法在每次开机的时候免密码登录到 Windows 操作系统。 @TOC 步骤 在 Windows 搜索框中输入...

2020-05-25 16:03:11 37 0

原创 Windows Linux 系统中获取端口被哪个应用程序占用

管理服务程序的时候,可能会查询某个端口当前被哪个进程占用。不仅能找出有问题的进程将其处理掉,也可以用来辅助检查某个程序是否开启了服务并在监听端口。 @TOC Windows 系统 Windows 系统上可以使用 PowerShell 命令来查询占用某个端口的程序。 比如,我们需要查询 5000 ...

2020-05-25 16:03:01 63 0

原创 最简单的代码,让 WPF 支持响应式布局

响应式布局在各种现代的 UI 框架中不是什么新鲜的概念,基本都是内置支持。然而在古老的 WPF 框架中却并没有原生支持,后来虽然通过 Blend 自带的 Interactions 库实现了响应式布局,但生成的代码量太大了,而且需要引入额外的库。 如果只是希望临时局部地方使用响应式布局,那么其实可以...

2020-05-25 16:02:58 40 0

原创 当无边框窗口被子窗口遮挡导致难以调节窗口大小时,可通过处理 NCHITTEST 消息重新支持调节窗口大小...

做无边框窗口之后,我们有方法可以让窗口的标题栏区域和边缘调大小的区域继续正常工作,直到——这个窗口上面覆盖了其他的子窗口。这个子窗口会吃掉消息导致父窗口的边缘无法再继续处理这些消息。 @TOC 子窗口遮挡了父窗口 看一下下面的动画,这个窗口的下半部分放了一个子窗口。 然后尝试在边缘调节窗口尺寸...

2020-05-25 16:02:54 87 0

原创 如何给 GitHub Pages 配置多个域名?

因为以前对域名进行了一些调整,所以实际上我的博客在历年来经历了两个域名 blog.walterlv.com(新)和 walterlv.com(旧)。然而 GitHub Pages 只支持一个自定义域名,所以为了兼容旧域名的访问,如何可以让多个域名对应同一个 GitHub Pages 呢? @TO...

2020-05-25 16:02:13 51 0

原创 通过子类化窗口(SubClass)来为现有的某个窗口添加新的窗口处理程序(或者叫钩子,Hook)...

创建窗口的时候,可以传一个消息处理函数。然而如果窗口不是自己创建的,还能增加消息处理函数吗?答案是可以的,除了 SetWindowsHookEx 来添加钩子之外,更推荐用子类化的方式来添加。 本文介绍如何通过子类化(SubClass)的方式来为窗口添加额外的消息处理函数。 @TOC 子类化 子类...

2020-05-25 16:01:18 32 0

原创 .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)

获取图片宽高的方法有很多种,本文介绍 .NET 中获取图片宽高的几种方法并评估其性能。如果你打算对大量图片进行一些处理,本文可能有用。 本文内容本文即将评估的方法`System.Drawing.Imaging.Metafile``System.Drawing.Bitmap``System.Win...

2020-04-30 11:59:43 109 0

原创 修复 Windows 10 设置界面里面混乱的语言翻译

Windows 10 每次新发布一个版本都会遇到各种各样的新型 Bug。 本文介绍的是 Windows 10 的设置界面里面,各种各样的语言文字都很混乱,就像统一错位了一样。本文也会同时介绍其修复方法。 本文内容系统版本混乱的界面修复方法将语言切换回英文删除中文语言包删除下载缓存文件重新下载中文...

2020-04-30 11:58:15 187 0

原创 Linux 系统根目录下的文件夹

本文介绍 Linux 系统根目录下的各种文件夹及其用途,了解这些目录可以帮助你更好地管理你的 Linux 主机。 本文内容Linux 系统根目录 Linux 系统根目录 各个不同 Linux 发行版的根目录会有一些区别,但大多数发行版的主要的目录都是有的。 /bin binary 用于存放经常...

2020-04-30 11:57:09 109 0

原创 收集的 Linux VPS 在线重装系统脚本

因为 VPS 上预装的操作系统我并不习惯,所以打算重装一个。有的 VPS 服务商提供了较多种类的系统选择,有的却没有。如果你发现你希望重装的系统服务商没有提供,可以考虑自己安装。 本文内容重装脚本 - 来自萌咖CentOS -> Debian 重装脚本 - 来自萌咖 以下是来自萌咖的一键重...

2020-04-30 11:56:26 254 0

原创 如何设置 ASP.NET Core 程序监听的 IP 和端口

Web 服务需要配置监听的 IP 和端口才可以对外提供真正的服务。本文介绍如何设置 ASP.NET Core 程序监听的 IP 和端口。 ASP.NET Core 程序默认集成了 Kestrel 服务器,可以直接对外提供 Web 服务。虽然可以直接提供服务,但通常建议使用反向代理服务器来间接提供...

2020-04-30 11:55:41 211 0

原创 全民 https!使用 FreeSSL 申请免费的 https 证书

到现在还不为你的网站添加 https 的话,浏览器已经会非常显眼地显示“不安全”了。 感谢 Let’s Encrypt,感谢 buypass,个人使用申请 https 证书的话已经可以免费了。 本文内容关于域名第一步:输入域名第二步:填写邮箱第三步:安装并用 KeyManager 打开第四步:验...

2020-04-30 11:54:41 170 0

原创 使用 Frp 为你的 Web 服务添加 https 支持

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。 在众多反向代理应用中,frp 的最大特点就在于内网穿透。所以,如果你有将内网对外提供 Web 服务的需求,就可以考虑使用 frp ...

2020-04-30 11:53:37 135 0

原创 为 ASP.NET Core 程序制作 URL 的 301/302 跳转

如果你有一些需要重定向网页 URL 的情况,可以返回 HTTP 状态码 301/302 告诉浏览器或者搜索引擎访问新的 URL。本文描述如何在 ASP.NET Core 中进行重定向。 本文内容HTTP 状态码 301/302ASP.NET Core重定向中间件重定向小心缓存 HTTP 状态码 ...

2020-04-30 11:52:48 98 0

原创 三种方法为 ASP.NET Core 对外服务添加 https 支持(kestrel / frp / nginx)

虽然使用 Visual Studio 创建 ASP.NET Core 程序的时候可以选择是否添加 https 支持,不过这种方式只添加了 localhost 的证书,只有本地访问时浏览器才会承认。真正对外公开服务的时候这样是绝对没法儿提供 https 服务的。 本文介绍使用三种不同的方式添加 ht...

2020-04-30 11:52:10 80 0

原创 使用 Kestrel 为你的 ASP.NET Core 服务添加 https 支持

Kestrel 是一个跨平台的适用于 ASP.NET Core 的 Web 服务器。它内置集成在了 ASP.NET Core 项目模板中,所以编写和对外开放一个 Web 服务会非常简单。 虽然不推荐直接使用 Kestrel 对外提供 Web 服务,但为了简单的话,临时使用也是非常不错的选择。 K...

2020-04-30 11:51:29 105 0

原创 Win32 方法 CreateFile 中选择合适的文件打开模式(CREATE_NEW, CREATE_ALWAYS, OPEN_EXISTING, OPEN_ALWAYS, TRUNCATE_EXI

Windows 打开文件的 API 中提供了多种不同的文件打开方式。你可以根据你的业务场景选择适合你的文件打开方式。 本文内容Windows API`dwCreationDisposition``CREATE_NEW``CREATE_ALWAYS``OPEN_EXISTING``OPEN_ALW...

2020-04-30 11:50:29 104 0

原创 .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)

.NET 中文件打开的 API File.Open 提供了多种不同的文件打开方式,这些方式大多数与 Windows 文件 API 中的模式是对应的,但也有一些 .NET 层面的判断以及名称的变化。在 .NET 层你可以选择适合你业务场景需要的文件打开方式。 本文内容文件打开方式`FileMode...

2020-04-30 11:49:27 59 0

原创 WPF 中如何创建忽略 DPI 属性的图片

WPF 框架设计为与 DPI 无关,但你依然可能遇到 DPI 问题。尤其是 Image 控件显示的图片会根据图片 EXIF 中的 DPI 信息和屏幕 DPI 自动缩放图片。对于 UI 用图来说这是好事,但对于软件用户随便插入的图片来说就不是了——用户传入的图片可能是各种各样不统一的 DPI。因此这...

2020-04-30 11:48:31 67 0

原创 为什么不应该公开用来同步的加锁对象?为什么不应该 lock(this)/lock(string) 或者 lock 任何非私有对象?

如果你编写线程安全代码时为了省事儿直接 lock(this),或者早已听说不应该 lock(this),只是不知道原因,那么阅读本文可以帮助你了解原因。 本文内容原因实例扩展lock 公开的属性lock 字符串lock 其他任何可能被其他对象获取的公开对象结论 原因 不应该 lock(this)...

2020-04-30 11:47:27 71 0

原创 为什么实现 .NET 的 ICollection 集合时需要实现 SyncRoot 属性?如何正确实现这个属性?

非泛型版本的 ICollection 中有 IsSynchronized 属性和 SyncRoot 属性,这两个属性被用来设计成以线程安全的方式访问和修改集合。不过这个设计让线程安全的访问由集合的实现方转嫁到了调用方,导致要么很难实现,要么很难调用。 虽然泛型版本的 ICollection<...

2020-04-30 11:46:40 110 0

原创 .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。

在解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。。 其原因是所解压的文件并非 zip 文件。 本文内容异常原因 异常 在解压 Zip 文件时出现异常: System.IO.InvalidDataException: 找不到中...

2020-04-30 11:45:48 261 0

原创 如何在旧版本的 .NET Core / Framework 中使用 C# 8 的异步流(IAsyncDisposable / IAsyncEnumerable / IAsyncEnumerator)

C# 8.0 为我们带来了异步流,可以使用 async foreach,不过使用此语法需要 IAsyncEnumerable / IAsyncEnumerator 类型。本文介绍如何在旧版本的 .NET Framework 和旧版本的 .NET Core 中获得此类型。 本文内容异步流所需版本安...

2020-04-30 11:44:56 101 0

提示
确定要删除当前文章?
取消 删除