自定义博客皮肤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

阅读数 200

评论数 3

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

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

2019-10-28 09:31:22

阅读数 179

评论数 0

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

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

2019-08-30 15:03:48

阅读数 238

评论数 0

原创 如何在 .NET/C# 代码中安全地结束掉一个控制台应用程序?通过发送 Ctrl+C 信号来结束

我的电脑上每天会跑一大堆控制台程序,于是管理这些程序的运行就成了一个问题。或者说你可能也在考虑启动一个控制台程序来完成某些特定的任务。 如果我们需要结束掉这个控制台程序怎么做呢?直接杀进程吗?这样很容易出问题。我正在使用的一个控制台程序会写文件,如果直接杀进程可能导致数据没能写入到文件。所以本文介...

2020-01-28 17:56:00

阅读数 77

评论数 0

原创 .NET Standard 的管理策略

.NET Standard 作为各大 .NET 的标准,我们有必要了解一下它是如何在各种 .NET 的实现之间履行自己的职责的。所以,本文会说说它的管理策略。 本文内容都有哪些 .NET Standard 的实现?标准在前还是实现在前?标准之内还是使用标准?并不一定都能实现的标准 都有哪些 .N...

2020-01-28 17:53:34

阅读数 130

评论数 0

原创 长期支持 LTS(Long-term Support)是怎样的一种支持方式

在 .NET Core 2.1 发布之时,微软称之为一个 LTS 版本,那么 LTS 的版本是一种怎样的版本呢? 本文内容LTSLTSC / LTSBESR LTS 这是 .NET Core 2.1 的发布博客:Announcing .NET Core 2.1 - .NET Blog;文中说: ...

2020-01-28 17:52:50

阅读数 170

评论数 0

原创 在 Visual Studio 的解决方案资源管理器中隐藏一些文件

项目文件中有一些属性几乎是专门为 IDE 而准备的,不过考虑到 .NET 生态的开发者多数都使用 Visual Studio,所以基本上也只有 Visual Studio 对这些特性支持的最全面。(才不会透漏这些属性其实本就是为 Visual Studio 而准备的呢。) 本文将介绍如何在 Vis...

2020-01-28 17:47:02

阅读数 67

评论数 0

原创 解读 Microsoft.NET.Sdk 的源码,你能定制各种奇怪而富有创意的编译过程

在 csproj 中,Project 中的 Sdk 属性是 MSBuild 15.0 开始支持的,也就是 Visual Studio 2017 开始支持。有了 Sdk 属性的存在,MSBuild 编译过程能够扩展得非常强大,而不止是过去 Import 的一个 props 和 targets 文件。...

2020-01-28 17:45:00

阅读数 56

评论数 0

原创 阻止某个 NuGet 包意外升级

出于兼容性考虑,我们可能不再更新某个项目的 NuGet 包。典型的情况是软件版本进行了大规模的不兼容的升级,需要对旧格式的数据进行读取,以便迁移到新格式的数据。 然而,团队开发的软件可能因为某个小伙伴不知道这样的历史问题,从而手抖将某个不应该更新的 NuGet 包更新了,于是迁移就挂了。 本文提供...

2020-01-28 17:40:49

阅读数 77

评论数 0

原创 git subtree 不断增加的推送时间,解不玩的冲突!这篇文章应该能救你

原生 git 对于公共组件那种类型的子仓库的支持并不怎么好,就是那种某个子文件夹是一个另外的 git 仓库,并被多个 git 父仓库使用的形式。实际使用的感受甚至是“糟糕透了”。 这种并不友好的子仓库支持可能与 git 的设计理念有关,不过,git 的开发者始终在打补丁以稍微优化这样的体验。 本...

2020-01-28 17:39:22

阅读数 51

评论数 0

原创 使用 LINQ to XML,.NET 让生成 XML 文件变得和直接写 XML 一样轻松

由 .NET Framework 3.5 引入,并依然在 .NET Core 中发扬光大的 LINQ to XML 让编写 XML 文件变得非常轻松。 使用 XElement、XAttribute 我们能够完整构造一个 XML 出来。为了能直观地体会到优势,我写一个最简单的例子: var roo...

2020-01-28 17:37:49

阅读数 38

评论数 0

原创 将 .NET Core 项目打一个最简单的 NuGet 源码包,安装此包就像直接把源码放进项目一样

NuGet 原本就提供了生成源码包的功能。不过,NuGet 原生的源码包仅用于调试时自带调试信息和调试源码。 本文将以最简单的方式制作一个源码引用包。安装 NuGet 包后,不会生成任何程序集引用,而是相当于将源码直接放入被安装的程序集中一样。 本文内容准备工作将源码加入 NuGet 包安装 N...

2020-01-28 17:36:05

阅读数 46

评论数 0

原创 如何在 MSBuild Target(Exec)中报告编译错误和编译警告

我曾经写过一篇文章 如何创建一个基于命令行工具的跨平台的 NuGet 工具包,通过编写一个控制台程序来参与编译过程。但是,相比于 基于 Task 的方式,可控制的因素还是太少了。 有没有什么办法能够让控制台程序也能与 MSBuild Target 之间发生更多的信息交换呢?比如报告编译错误和编译警...

2020-01-28 17:33:48

阅读数 30

评论数 0

原创 PasswordVault —— 在 UWP 应用中安全地保存密码

只要你做过自动登录,一定会遇到密码的安全问题。现在大部分的网络服务都已经支持 Token 了,有些已经支持 OAuth2.0,这意味着客户端不怎么需要关心密码的安全保存问题。 但是,依然还有一些古老的服务和协议需要直接传输密码,比如邮件的 IMAP 协议。 我在 ERMail 应用的开发中就遇到...

2020-01-28 17:32:37

阅读数 29

评论数 0

原创 如何编写 WPF 的标记扩展 MarkupExtension,即便在 ControlTemplate/DataTemplate 中也能生效

WPF 的标记扩展为 WPF 带来了强大的扩展性。利用自定义的标记扩展,我们能够为 XAML 中的属性提供各种各样种类的值,而不仅限于自带的那一些。 不过有小伙伴发现在 ControlTemplate 或 DataTemplate 中编写标记扩展有时并不能正常工作,而本文将提供解决方法。 本文并...

2020-01-28 17:25:35

阅读数 49

评论数 0

原创 如何让 .NET Core 命令行程序接受密码的输入而不显示密码明文

如果是在 GUI 中要求用户输入密码,各 UI 框架基本都提供了用于输入密码的控件;在这些控件中,用户在输入密码的时候会显示掩码。然而对于控制台程序来说,并没有用于输入密码的原生方法。 本文将讲述一种在控制台中输入密码,并仅显示掩码的方法。 开始简单的程序 让我们开始一个简单的 .NET Cor...

2020-01-28 17:24:32

阅读数 40

评论数 0

原创 为博客或个人站点的 Markdown 添加 LaTeX 公式支持

LaTeX 是一套排版系统,原生包含对科学和技术型文档内容的支持,而 LaTeX 公式(LaTeX math and equations)则是这种支持中非常重要的一部分。如果能够在博客或个人站点中使用到 LaTeX 的排版系统,或者说只是其中的数学公式部分,对学术性(或者只是使用到了部分数学原理)...

2020-01-28 17:23:04

阅读数 52

评论数 0

原创 Sdk 风格的 csproj 对 WPF/UWP 支持不太好?有第三方 SDK 可以用!MSBuild.Sdk.Extras

自从微软推出 .NET Core 以来,新的项目文件格式以其优秀的可扩展性正吸引着更多项目采用。然而——微软官方的 WPF/UWP 项目模板依然还在采用旧的 csproj 格式! 这只是因为——在 .NET Core 3.0 以前,基于 Microsoft.NET.Sdk 的官方 SDK 依然对 ...

2020-01-28 17:21:13

阅读数 73

评论数 0

原创 让你编写的控件库在 XAML 中有一个统一的漂亮的命名空间(xmlns)和命名空间前缀

在 WPF XAML 中使用自己定义的控件时,想必大家都能在 XAML 中编写出这个控件的命名空间了。然而——我写不出来,除非借助 ReSharper。 如果控件能够有一个漂亮的命名空间和命名空间前缀呢?——好吧,还是写不出来,不过,至少漂亮些。本文将指导你自定义在 XAML 中使用的命名空间。 ...

2020-01-28 17:19:20

阅读数 17

评论数 0

原创 如何编写基于 Microsoft.NET.Sdk 的跨平台的 MSBuild Target(附各种自带的 Task)

我之前写过一篇 理解 C# 项目 csproj 文件格式的本质和编译流程,其中,Target 节点就是负责编译流程的最关键的节点。但因为篇幅限制,那篇文章不便详说。于是,我在本文说说 Target 节点。 本文内容Target 的节点结构Target 执行的时机和先后顺序Microsoft.NE...

2020-01-28 17:18:33

阅读数 31

评论数 0

原创 为自己搭建的博客添加可切换的暗色和亮色主题

不知从什么时候开始,越来越多的小伙伴喜欢在暗色的编辑器中编写代码;于是写博客的小伙伴们也得在博客中顺应这样的潮流,这样才能更接近平时写代码时的环境。 然而——绝大多数的技术类博客或技术文章都是亮色主题的,代码在其中以和谐但不太好看的亮色存在,或者扎眼但熟悉的暗色存在。这始终觉得不那么舒适。 于是,...

2020-01-28 17:16:22

阅读数 240

评论数 0

原创 在移动端打开 Google 的网页快照

Google 的网页快照功能在原网页意外挂掉的时候能够临时为我们提供网页内的信息。例如我们要搜索的某项技术资料来源于某个个人站点,而现在他的域名到期了没有续费;例如我现在的博客在部署期间挂掉了,不能继续访问。这时 Google 网页快照都能够帮我们临时访问网页缓存。 PC 端的网页快照很容易找到...

2020-01-28 17:15:14

阅读数 124

评论数 0

原创 在 HTML 超链接上添加可交互的 ToolTip

当鼠标滑过超链接的那一刻,我们都能想象出一个熟悉的白色提示框从鼠标指针所在的位置淡入。那是 ToolTip 提示框。HTML 中我们能通过简单的属性设置获得 ToolTip,但如果希望 ToolTip 是能交互的,那么就阅读本文吧! 本文内容原生 ToolTip可交互 ToolTip 原生 To...

2020-01-28 17:12:29

阅读数 49

评论数 0

原创 推荐 .NET/C# 开发者安装的几款代码分析插件或对应的代码分析 NuGet 包

如果你使用的是旧版本的 Visual Studio,那么默认的代码分析规则集是“最小建议规则集”。基于这个,写出来的代码其实只能说是能跑通过而已。随着 Roslyn 的发布,带来了越来越多更强大的代码分析器,可以为编写高质量的代码带来更多的帮助。 作为 .NET/C# 开发者,强烈建议安装本文推荐...

2019-12-30 08:49:39

阅读数 55

评论数 0

原创 在 WPF 程序中应用 Windows 10 真•亚克力效果

从 Windows 10 (1803) 开始,Win32 应用也可以有 API 来实现原生的亚克力效果了。不过相比于 UWP 来说,可定制性会差很多。 本文介绍如何在 WPF 程序中应用 Windows 10 真•亚克力效果。(而不是一些流行的项目里面自己绘制的亚克力效果。) 本文内容API如何...

2019-12-30 08:48:51

阅读数 54

评论数 0

原创 在 MSBuild 编译过程中操作文件和文件夹(检查存在/创建文件夹/读写文件/移动文件/复制文件/删除文件夹)

本文整理 MSBuild 在编译过程中对文件和文件夹处理的各种自带的编译任务(Task)。 本文内容`Exists` 检查文件存在`MakeDir` 创建文件夹`Move` 移动文件`Copy` 复制文件`Delete` 删除文件`ReadLinesFromFile` 读取文件`WriteLin...

2019-12-30 08:45:39

阅读数 62

评论数 0

原创 屏幕边缘上有趣的 1 个像素,看不见、摸不到

如果你的屏幕分辨率是 1920×1080,那么一个全屏的窗口程序尺寸是多少呢?想都不用想,是 1920×1080。 那么输入设备输入的坐标是多少呢?是 X∈[0, 1919] ?还是 X∈[1, 1920] ?还是 X∈[0, 1920] ? 本文内容鼠标输入与触摸输入有趣的 1 像素防踩坑秘籍...

2019-12-30 08:44:21

阅读数 45

评论数 0

原创 如何将一个 .NET 对象序列化为 HTTP GET 的请求字符串

HTTP GET 请求时携带的参数直接在 URL 中,形式如 ?key1=value&key2=value&key3=value。如果是 POST 请求时,我们可以使用一些库序列化为 json 格式作为 BODY 发送,那么 GET 请求呢?有可以直接将其序列化为 HTTP GET...

2019-12-30 08:42:57

阅读数 33

评论数 0

原创 如何在 MSBuild 中正确使用 % 来引用每一个项(Item)中的元数据

MSBuild 中写在 <ItemGroup /> 中的每一项是一个 Item,Item 除了可以使用 Include/Update/Remove 来增删之外,还可以定义其他的元数据(Metadata)。 使用 % 可以引用 Item 的元数据,本文将介绍如何正确使用 % 来引用每一个...

2019-12-30 08:42:20

阅读数 24

评论数 0

原创 使用 MSBuild Target 复制文件的时候如何保持文件夹结构不变

使用 MSBuild 中的 Copy 这个编译目标可以在 .NET 项目编译期间复制一些文件。不过使用默认的参数复制的时候文件夹结构会丢失,所有的文件会保留在同一级文件夹下。 那么如何在复制文件的时候保持文件夹结构与原文件夹结构一样呢? 本文内容CopyRecursiveDir Copy 下面是...

2019-12-30 08:40:06

阅读数 33

评论数 0

原创 一个简单的方法:截取子类名称中不包含基类后缀的部分

基类是 MenuItem,子类是 WalterlvMenuItem、FooMenuItem。基类是 Configuration,子类是 WalterlvConfiguration、ExtensionConfiguration。在代码中,我们可能会为了能够一眼看清类之间的继承(从属)关系而在子类名称...

2019-12-30 08:35:36

阅读数 20

评论数 0

原创 C# 8.0 的可空引用类型,不止是加个问号哦!你还有很多种不同的可空玩法

C# 8.0 引入了可空引用类型,你可以通过 ? 为字段、属性、方法参数、返回值等添加是否可为 null 的特性。 但是如果你真的在把你原有的旧项目迁移到可空类型的时候,你就会发现情况远比你想象当中复杂,因为你写的代码可能只在部分情况下可空,部分情况下不可空;或者传入空时才可为空,传入非空时则不可...

2019-12-30 08:35:07

阅读数 77

评论数 0

原创 Windows 系统的默认字体是什么?应用的默认字体是什么?

作为中文应用的开发者,我们多半会认为系统的默认字体是“微软雅黑”。然而如果真的产生了这种误解,则很容易在开发本地化应用的时候踩坑。 于是本文带你了解 Windows 系统的默认字体。 本文内容Windows 10/8.1/8/7/VistaWindows XP 及更早系统 Windows 10/...

2019-12-30 08:33:21

阅读数 153

评论数 0

原创 可集成到文件管理器,一句 PowerShell 脚本发布某个版本的所有 NuGet 包

要发布 NuGet 包,只需要执行命令 nuget push xxx.nupkg 即可,或者去 nuget.org 点鼠标上传。 不过,如果你有很多的 NuGet 包并且经常需要推送的话,也可以集成到 Directory Opus 或者 Total Commander 中。 本文内容NuGet ...

2019-12-30 08:32:26

阅读数 22

评论数 0

原创 清理 git 仓库太繁琐?试试 bfg!删除敏感信息删除大文件一句命令搞定(比官方文档还详细的使用说明)

你可能接触过 git-filter-branch 来清理 git 仓库,不过同时也能体会到这个命令使用的繁琐,以及其超长的执行时间。 现在,你可以考虑使用 bfg 来解决问题了! 本文内容安装 bfg传统方式安装(不推荐)使用包管理器 scoop 安装准备工作常见用法删除误上传的大文件删除特定的...

2019-12-30 08:28:35

阅读数 29

评论数 0

原创 C#/.NET 当我们在写事件 += 和 -= 的时候,方法是如何转换成事件处理器的

当我们在写 += 和 -= 事件的时候,我们会在 += 或 -= 的右边写上事件处理函数。我们可以写很多种不同的事件处理函数的形式,那么这些形式都是一样的吗?如果你不注意,可能出现内存泄漏问题。 本文将讲解事件处理函数的不同形式,理解了这些可以避免编写代码的时候出现内存相关的问题。 本文内容典型...

2019-12-30 08:27:43

阅读数 21

评论数 0

原创 .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表

我们知道,32 位程序在读取注册表的时候,会自动将注册表的路径映射到 32 位路径下,即在 Wow6432Node 子节点下。但是 64 位程序不会映射到 32 位路径下。那么 64 位程序如何读取到 32 位程序写入的注册表路径呢? 本文内容Wow6432Node如何在 64 位程序中读取 3...

2019-12-30 08:25:28

阅读数 22

评论数 0

原创 将 Direct3D11 在 GPU 中的纹理(Texture2D)导出到内存(Map)或导出成图片文件

Direct3D11 的使用通常不是应用程序唯一的部分,于是使用 Direct3D11 的代码如何与其他模块正确地组合在一起就是一个需要解决的问题。 本文介绍将 Direct3D11 在 GPU 中绘制的纹理映射到内存中,这样我们可以直接观察到此纹理是否是正确的,而不用担心是否有其他模块影响了最终...

2019-12-30 08:23:36

阅读数 34

评论数 0

原创 使用 Direct3D11 的 OpenSharedResource 方法渲染来自其他进程/设备的共享资源(SharedHandle)

如果你得到了一个来自于其他进程或者其他模块的 Direct3D11 的共享资源,即 SharedHandle 句柄,那么可以使用本文提到的方法将其转换成 Direct3D11 的设备和纹理,这样你可以进行后续的其他处理。 本文内容SharpDXSharedHandleOpenSharedReso...

2019-12-30 08:06:18

阅读数 32

评论数 0

原创 .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)

我们知道 Windows 系统 NTFS 文件系统提供了硬连接功能,可以通过 mklink 命令开启。如果能够通过代码实现,那么我们能够做更多有趣的事情。 本文提供使用 .NET/C# 代码创建 NTFS 文件系统的硬连接功能(目录联接)。 本文内容目录联接使用 .NET/C# 实现使用 Jun...

2019-12-30 08:05:28

阅读数 28

评论数 0

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