有一些程序不支持被直接启动,而要求通过命令行启动。这个时候,你就需要使用 cmd.exe 来启动这样的程序。我们都知道如何在 cmd.exe 中启动一个程序,但是当你需要自动启动这个程序的时候,你就需要知道如何通过 cmd.exe 来启动一个程序,而不是手工输入然后回车运行了。 本文就介绍 cmd.exe 的命令行启动参数。利用这些参数,你可以自动化地通过 cmd.exe 程序来完成一些原...
在 Visual Studio 中重新将高级保存功能放出来,便于强制指定文件编码格式
Visual Studio 的早期版本中有一个高级保存功能,但是升级到 Visual Studio 2019 之后这个功能就不在菜单项里面了。 本文将带你把它找出来继续使用。 第一步:工具 -> 自定义 打开 Visual Studio 2019,然后进入“工具 -> 自定义”菜单项。对于英文版本,是“Tools -> Customize”菜单项。 第二...
WPF 使用 AppBar 将窗口停靠在桌面上,让其他程序不占用此窗口的空间(附我封装的附加属性)
本文介绍如何使用 Windows 的 AppBar 相关 API 实现固定停靠在桌面上的特殊窗口。 停靠窗口 你可能并不明白停靠窗口是什么意思。 看下图,你可能使用过 OneNote 的停靠窗口功能。当打开一个新的 OneNote 停靠窗口之后,这个新的 OneNote 窗口将固定显示在桌面的右侧,其他的窗口就算最大化也只会占据剩余的空间。 OneNote 的这种功能可以让你...
在整个 Git 仓库的历史(包括所有分支和标签)中修改提交作者的信息(姓名和邮箱)
一般情况下不建议修改 git 仓库的历史。 但是现在我计划开源我的一个项目,于是自己个人使用的姓名和邮箱就需要在开源的时候改为使用我公开的姓名和邮箱。对于旧仓库,我将废弃,将来所有的精力都将在开源版本的仓库中;而对于开源版本的新仓库,由于此前没有人克隆过,所以也不会因为历史的修改产生问题。所以,我可以很放心地更改全部的 git 仓库历史。 我打算将整个 Git 仓库历史中的名称和邮箱...
.NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
如果你使用过 WPF/UWP 等 XAML UI 框架,那么应该了解到附加属性的概念。那么没有依赖属性支持的时候如何做附加属性的功能呢?你可能会想到弱引用。但这需要做一个弱引用字典,要写的代码还是非常麻烦的。 本文介绍 .NET 的 ConditionalWeakTable<TKey,TValue> 类型,适用于 .NET Framework 4.0 以上和全部 .NET Co...
WPF 判断一个对象是否是设计时的窗口类型,而不是运行时的窗口
当我们对 Window 类型写一个附加属性的时候,在属性变更通知中我们需要判断依赖对象是否是一个窗口。但是,如果直接判断是否是 Window 类型,那么在设计器中这个属性的设置就会直接出现异常。 那么有没有什么方法能够得知这是一个设计时的窗口呢?这样就不会抛出异常,而能够完美支持设计器了。 方法一:判断设计时属性 WPF 原生自带一个附加属性可以判断一个依赖对象是否来源于设计器...
通过修改环境变量修改当前进程使用的系统 Temp 文件夹的路径
Windows 系统提供了一个在 Windows 单个用户下全局的 Temp 文件夹,用于给各种不同的应用程序提供一个临时目录。但是,直到 Windows 10 推出存储感知功能之前,这个文件夹都一直只归各个应用程序自己管理,应用自己需要删除里面的文件。另外,进程多了,临时文件也会互相影响(例如个数过多、进程读写竞争等等)。 本文介绍将自己当前进程的 Temp 文件夹临时修改到应用程序自己...
Markdown 如何在内联代码或者代码块中使用代码开始符号反引号(`)
我们都知道如何在 Markdown 中使用反引号 ` 来包裹一段代码。无论是内联的代码还是单独的代码块,都需要使用它,只是个数的差别,比如 ` 和 ```。 那么如何能够在代码片中输入反引号(backtick)呢? 方法是:用两个反引号来包裹。 内联代码中包含反引号 例如,你想输入这段代码中包含`符号,那么你应该这么输入: ``这段代码中包含`符号`` 内联代码中只有反...
在编译期间使用 Roslyn/MSBuild 自带的方法/函数判断、计算和修改属性
充分利用 MSBuild 自带的方法,可以在编译期间完成大多数常见的属性转换,而不再需要自己专门写库来完成。 本文介绍如何使用 MSBuild 自带的方法,并列举 MSBuild 中各种自带的方法。 如何在编译期间使用 MSBuild 自带的方法 当然,在修改编译期间的代码的时候,你可能需要提前了解项目文件相关的知识: 理解 C# 项目 csproj 文件格式的本质和编...
Roslyn/MSBuild 在编译期间从当前文件开始查找父级文件夹,直到找到包含特定文件的文件夹
大家在进行各种开发的时候,往往都不是写一个单纯项目就完了的,通常都会有一个解决方案,里面包含了多个项目甚至是大量的项目。我们经常会考虑输出一些文件或者处理一些文件,例如主项目的输出目录一般会选在仓库的根目录,文档文件夹一般会选在仓库的根目录。 然而,我们希望输出到这些目录或者读取这些目录的项目往往在很深的代码文件夹中。如果直接通过 ..\..\.. 来返回仓库根目录非常不安全,你会数不过来...
Directory Opus 使用命令编辑器添加 PowerShell / CMD / Bash 等多种终端到自定义菜单
使用 Directory Opus 替代 Windows 自带的文件资源管理器来管理你计算机上的文件可以极大地提高你的文件处理效率。 本文将教你如何使用 Directory Opus 的命令编辑器功能编写一组菜单,我们将在这组菜单里面集成各种各样的终端。 命令编辑器 如果你是从下面这篇文章阅读过来的,那么你现在应该正好已经打开了一个命令编辑器: 在 Directory ...
C# 8.0 中开启默认接口实现
当你升级到 C# 8.0 和 .NET Core 3.0 之后,你就可以开始使用默认接口实现的功能了。 从现在开始,你可以在接口里面添加一些默认实现的成员,避免在接口中添加成员导致大量对此接口的实现崩溃。 最低要求 要写出并且正常使用接口的默认实现,你需要: C# 8.0 .NET Core 3.0 Visual Studio 2019 Preview (16....
Directory Opus 使用命令编辑器集成 TortoiseGit 的各种功能
使用 Directory Opus 替代 Windows 自带的文件资源管理器来管理你计算机上的文件可以极大地提高你的文件处理效率。 本文将教你如何使用 Directory Opus 的命令编辑器功能创建一个命令——跟 TortoiseGit 进行集成。 命令编辑器 如果你是从下面这篇文章阅读过来的,那么你现在应该正好已经打开了一个命令编辑器: 在 Directory ...
在 Directory Opus 中添加自定义的工具栏按钮提升效率
使用 Directory Opus 替代 Windows 自带的文件资源管理器来管理你计算机上的文件可以极大地提高你的文件处理效率。 Directory Opus 自定义的工具栏按钮可以执行非常复杂的命令,所以充分利用自定义工具栏按钮的功能可以更大程度上提升工作效率。 Directory Opus 的工具栏 这是我的 Directory Opus 的界面(暂时将左侧的树关掉了)...
让 Directory Opus 支持 Windows 10 的暗色主题
使用 Directory Opus 替代 Windows 自带的文件资源管理器来管理你计算机上的文件可以极大地提高你的文件处理效率。 由于我自己的 Windows 10 系统使用的是暗色主题,所以我希望 Directory Opus 也能搭配我系统的纯暗色主题。 本文介绍如何将 Directory Opus 打造成搭配 Windows 10 的暗色主题。 Directory O...
通过分析 WPF 的渲染脏区优化渲染性能
本文介绍通过发现渲染脏区来提高渲染性能。 脏区 Dirty Region 在计算机图形渲染中,可以每一帧绘制全部的画面,但这样对计算机的性能要求非常高。 脏区(Dirty Region)的引入便是为了降低渲染对计算机性能的要求。每一帧绘制的时候,仅仅绘制改变的部分,在软件中可以节省大量的渲染资源。而每一帧渲染时,改变了需要重绘的部分就是脏区。 以下是我的一款 WPF 程序 W...
Roslyn/MSBuild 在编译期间处理路径中的斜杠与反斜杠
本文介绍如何在项目文件 csproj,或者 MSBuild 的其他文件(props、targets)中处理路径中的斜杠与反斜杠。 路径中的斜杠与反斜杠 我们都知道文件路径的层级之间使用斜杠(/)或者反斜杠(\)来分隔,具体使用哪一个取决于操作系统。本文不打算对具体使用哪一种特别说明,不过示例都是使用 Windows 操作系统中的反斜杠(\)。 对于一个文件夹的路径,末尾无论是否...
在 Roslyn/MSBuild 中进行基本的数学运算
在任何一种编程语言中,做基本的数学运算都是非常容易的事情。不过,不知道 .NET 项目的项目文件 csproj 文件中进行数学运算就不像一般的编程语言那样直观了,毕竟这不是一门语言,而只是一种项目文件格式而已。 本文介绍如何在 Roslyn/MSBuild 的项目文件中使用基本的数学运算。 Roslyn/MSBuild 中的数学运算 在 MSBuild 中,数学运算需要使用 M...
使用 DISM 工具检查并修复 Windows 系统文件
DISM,Deployment Image Servicing and Management,部署映像服务和管理。本文介绍使用此工具检查并修复 Windows 的系统文件。 系统要求 Windows 8/8.1 和 Windows 10 开始提供 DISM 工具。 相比于我在另一篇博客中提及的 sfc,DISM 利用 Windows 系统镜像来完成修复,所以更容易修复成功。关于...
使用 System File Check (SFC) 工具检查并修复 Windows 系统文件
sfc.exe 这个程序的名称指的是 System File Check,用于做系统文件检查。本文介绍使用此命令检查并修复 Windows 系统文件。 系统要求 Windows Vista 及以上的操作系统才具有 sfc.exe 工具。 相比于 Windows 7 开始提供 dism 工具。 当然,虽然系统要求如此,但如果你使用的是 Windows 8/8.1 或者 Windo...
Visual Studio 使用 Parallel Builds Monitor 插件迅速找出编译速度慢的瓶颈,优化编译速度
嫌项目编译太慢?不一定是 Visual Studio 的问题,有可能是你项目的引用关系决定这个编译时间真的省不下来。 可是,编译瓶颈在哪里呢?本文介绍 Parallel Builds Monitor 插件,帮助你迅速找出编译瓶颈。 下载安装 Parallel Builds Monitor 前往 Parallel Builds Monitor - Visual Studio Ma...
使用 EnumWindows 找到满足你要求的窗口
在 Windows 应用开发中,如果需要操作其他的窗口,那么可以使用 EnumWindows 这个 API 来枚举这些窗口。 本文介绍使用 EnumWindows 来枚举并找到自己关心的窗口(如 QQ/TIM 窗口)。 EnumWindows 你可以在微软官网了解到 EnumWindows。 要在 C# 代码中使用 EnumWindows,你需要编写平台调用 P/Invoke...
安装和运行 .NET Core 版本的 PowerShell
Windows 自带一个强大的 PowerShell,不过自带的 PowerShell 一直是基于 .NET Framework 的版本。你可以下载安装一个 .NET Core 版本的 PowerShell,以便获得 .NET Core 的各种好处。包括跨平台,以及更好的性能。 本文将介绍在你的 Windows 系统上安装一个 .NET Core 版本的 PowerShell。 ...
XAML 很少人知道的科技
本文介绍不那么常见的 XAML 相关的知识。 Thickness 可以用空格分隔 当你用设计器修改元素的 Margin 时,你会看到用逗号分隔的 Thickness 属性。使用设计器或者属性面板时,使用逗号是默认的行为。 不过你有试过,使用空格分隔吗? <Button Margin="10 12 0 0" /> 使用逗号(,)设置多值枚举 有一些枚举标记了 ...
WPF 程序鼠标在窗口之外的时候,控件拿到的鼠标位置在哪里?
在 WPF 程序中,我们有 Mouse.GetPosition(IInputElement relativeTo) 方法可以拿到鼠标当前相对于某个 WPF 控件的位置,也可以通过在 MouseMove 事件中通过 e.GetPosition(IInputElement relativeTo) 方法拿到同样的信息。不过,在任意时刻去获取鼠标位置的时候,如果鼠标在窗口之外,将获取到什么点呢? ...
如何修改 Visual Studio 新建项目时的默认路径
Visual Studio 创建新项目的时候,默认位置在 C:\Users\lvyi\source\repos\ 下。多数时候,我们都希望将其改为一个更适合自己开发习惯的路径。实际上修改默认路径并不是一个麻烦的事情,但是当紧急需要修改的时候,你可能找不到设置项在哪里。 本文介绍如何修改这个默认路径。 默认位置 默认位置在 C:\Users\lvyi\source\repos\ 下。...
使用 dotnet 命令行配合 vscode 完成一个完整 .NET 解决方案的编写和调试
如果你是开发个人项目,那就直接用 Visual Studio Community 版本吧,对个人免费,对小团体免费,不需要这么折腾。 如果你是 Mac / Linux 用户,不想用 Visual Studio for Mac 版;或者不想用 Visual Studio for Windows 版那么重磅的 IDE 来开发简单的 .NET Core 程序;或者你就是想像我这么折腾,那我们就开...
Visual Studio 通过修改项目的调试配置文件做到临时调试的时候不要编译(解决大项目编译缓慢问题)
.NET 托管程序的编译速度比非托管程序要快非常多,即便是 .NET Core,只要不编译成 Native 程序,编译速度也是很快的。然而总是有一些逗比大项目编译速度非常缓慢(我指的是分钟级别的),而且还没做好差量编译;于是每一次编译都需要等待几十秒到数分钟。这显然是非常影响效率的。 在解决完项目的编译速度问题之前,如何能够临时进行快速调试改错呢?本文将介绍在 Visual Studio ...
Visual Studio 如何能够不进行编译就调试 .NET/C# 项目(用于解决大项目编译缓慢的问题)
.NET 托管程序的编译速度比非托管程序要快非常多,即便是 .NET Core,只要不编译成 Native 程序,编译速度也是很快的。然而总是有一些逗比大项目编译速度非常缓慢(我指的是分钟级别的),而且还没做好差量编译;于是每一次编译都需要等待几十秒到数分钟。这显然是非常影响效率的。 在解决完项目的编译速度问题之前,如何能够临时进行快速调试改错呢?本文将介绍在 Visual Studio ...
WPF 获取元素(Visual)相对于屏幕设备的缩放比例,可用于清晰显示图片
我们知道,在 WPF 中的坐标单位不是屏幕像素单位,所以如果需要知道某个控件的像素尺寸,以便做一些与屏幕像素尺寸相关的操作,就需要经过一些计算(例如得到屏幕的 DPI)。 更繁琐的是,我们的控件可能外面有一些其他的控件做了 RenderTransform 进行了一些缩放,于是了解到屏幕像素单位就更不容易了。 本文将提供一套计算方法,帮助计算某个 WPF 控件相比于屏幕像素尺寸的缩放比例,...