walterlv - 吕毅

欢迎访问 https://blog.walterlv.com/ 热爱设计,不止是程序,更是艺术!
私信 关注
walter lv
码龄11年

https://blog.walterlv.com/

  • 1,377,690
    被访问量
  • 510
    原创文章
  • 2,129
    作者排名
  • 1,266
    粉丝数量
  • 于 2010-05-07 加入CSDN
获得成就
  • 博客专家认证
  • 获得477次点赞
  • 内容获得340次评论
  • 获得966次收藏
  • GitHub 获得137Stars
荣誉勋章
TA的专栏
  • miscellaneous
    5篇
  • unity
    8篇
  • mac
    1篇
  • blazor
    1篇
  • sharpdx
    3篇
  • asp
    1篇
  • site
    2篇
  • html
    2篇
  • css
    2篇
  • cpp
    1篇
  • .NET 异步与并发
    19篇
  • NuGet
    17篇
  • .NET 编译过程
    23篇
  • Roslyn 入门
    9篇
  • WPF on .NET Core
    3篇
  • dotnet
    307篇
  • csharp
    203篇
  • visualstudio
    91篇
  • msbuild
    57篇
吕毅 (微软 MVP)

MVP

  • blog.walterlv.com
  • mailto:walter.lv@qq.com
  • https://blog.walterlv.com/
  • 前往 GitHub
  • 前往 Twitter
  • 查看博客友链
  • 前往商店下载 Whitman

  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

专业团队:推荐一个网站,生成巨幅文字注释

通过学习本文的知识,你将可以在你的项目代码里创造大量的注释。让你的注释闪瞎团队所有人的钛合金X眼,我们是专业团队。Console.WriteLine(@"██╗ ██╗ █████╗ ██╗ ████████╗███████╗██████╗ ██╗ ██╗ ██╗██║ ██║██╔══██╗██║ ╚══██╔══╝██╔════╝██╔══██╗██║ ██║ ██║██║ █╗ ██║███████║██║ ██║ █████╗ ██████
原创
365阅读
0评论
0点赞
发布博客于 9 月前

在制作多框架项目的 NuGet 包时应该注意的问题(buildMultiTargeting TargetFrameworks)

制作一个 dll 引用的 NuGet 包简直是一键完成,无论是不是多框架项目;制作 dotnet-tools 也是如此。但如果需要自定义一些编译步骤,那么就需要在制作 NuGet 包时做很多的特殊处理了。本文介绍制作适用于多框架项目的 NuGet 工具包时应该注意的问题。本文内容背景知识NuGet 包内的文件夹结构制作有自定义功能的 NuGet 包执行时机1. 仅含 `build` 文件夹的 NuGet 包装到单框架项目中2. 仅含 `build` 文件夹的 NuGet 包装到多框架项目中3. 包含
原创
385阅读
0评论
0点赞
发布博客于 9 月前

在 PowerShell 里根据进程名杀掉进程

任务管理器杀进程大家都会,不过如果你的系统被卡到任务管理器都无法操作了,怎么办?直接在 PowerShell 中干掉!另外,这也非常容易集成到各种工具链中。系列博客:在 CMD 里根据进程名杀掉进程 - walterlv在 PowerShell 里根据进程名杀掉进程 - walterlv本文内容Stop-Process / killtaskkill 命令其他间接玩法Process.KillStop-Process / killPowerShell 脚本 Stop-Process 可以用来结
原创
1385阅读
1评论
0点赞
发布博客于 9 月前

在 CMD 里根据进程名杀掉进程

任务管理器杀进程大家都会,不过如果你的系统被卡到任务管理器都无法操作了,怎么办?拿控制台 CMD 吧!系列博客:在 CMD 里根据进程名杀掉进程 - walterlv在 PowerShell 里根据进程名杀掉进程 - walterlv本文内容taskkill 命令taskkill 命令taskkill /f /t /im chrome.exe/f 表示强制终止进程。如果不指定,那么 taskkill 会给进程发送终止信号,但进程可以阻止退出(例如提示文档需要保存)。指定了,就会强杀进程
原创
1493阅读
0评论
0点赞
发布博客于 9 月前

适合 .NET 开发者用的 GitHub Actions(时不时更新)

本文制作并长期更新适合 .NET 开发者用的 GitHub Actions。整理方式为整个文件而不是单个可用的模块,这样可以方便大家以最快的速度为自己的项目添加 GitHub Actions。当然自己改改也可。本文内容.NET 编译与单元测试(全平台).NET 编译与单元测试(仅限 Windows 系统下的编译)NuGet Push自带环境.NET 编译与单元测试(全平台)功能:编译你的 .NET 项目,并进行单元测试。适用:如果你的项目是纯 .NET 项目,无论项目是 .NET Core 还是
原创
302阅读
0评论
0点赞
发布博客于 9 月前

了解 Windows Linux 下命令行 Shell 启动程序传参的区别,这下不用再担心 Windows 下启动程序传参到 Linux 下挂掉了

启动某个程序,再带上一堆参数,这几乎是程序员们每天必做到事情。另外再算上各种辅助程序员们的自动化脚本,辅助构建的 CI(持续集成)等等,程序员们在创造大量的应用程序然后调用它们。但是,不经常跨系统玩这些的小伙伴们注意了,Windows 下的 Shell 和 Linux 下的 Shell 是有区别的!如果你不了解这些区别,很容易造成在 Windows 下编写的代码/脚本在 Linux 下无法使用的问题。本文列举 Windows/Linux 下 Shell 的区别。本文内容分号(;)路径空格路径分隔符其
原创
156阅读
0评论
0点赞
发布博客于 9 月前

比较 Windows 上四种不同的文件(夹)链接方式(NTFS 的硬链接、目录联接、符号链接,和大家熟知的快捷方式)

可能有很多小伙伴已经知道通过 mklink 命令来创建 NTFS 磁盘上的各种链接;当然,就算不知道 mklink 的链接,快捷方式应该每个人都知道吧。mklink 的选项有很多种,但你可能在其他文章中难以找到对这些不同选项的不同效果和使用限制的准确和统一描述。本文将介绍 Windows 系统中所有的链接方式,它们的优缺点、使用条件和坑。This post is written in multiple languages. Please select yours:{% include post-ver
原创
427阅读
0评论
0点赞
发布博客于 9 月前

Unity3D 入门:最简单的控制视角,以及控制角色前进、转向的脚本

本文依然是 Unity3D 的入门篇。作为 Unity3D 的入门读者,你可能希望迅速让你能在游戏中操作你的视角,或者让角色移动。本文内容创建脚本最简代码创建脚本作为入门篇,可能需要讲一下如何创建脚本。按下图,在 Unity 编辑器中:在 Hierarchy(层级)中选中主摄像机;在 Inspector(检查器)中选择最后那个 Add Component(添加组件);选择 New Script(新建脚本)输入脚本名称,然后点击 Create and Add(创建并添加)。接下来,我们
原创
971阅读
0评论
2点赞
发布博客于 9 月前

Unity3D 入门:使用 Visual Studio 开发 Unity C# 脚本,说说根目录的那些 sln 和 csproj 文件

本文介绍 Unity3D 项目根目录的 sln 和 csproj 文件,你将知道如何正确理解和使用它们。对于传统 .NET/C# 的开发者来说,在解决方案中管理 NuGet 包,在 C# 项目中引用 dll 或 NuGet 包是家常便饭。但在 Unity 项目里面,你可能要改变这一观念——因为 Unity 项目里面实际上并不存在 sln 和 csproj 文件。等等!那我们在根目录看到的那些 sln 和 csproj 文件是什么?那只是 Unity 编辑器为了让你方便写 C# 代码临时生成给你用的
原创
928阅读
0评论
0点赞
发布博客于 9 月前

Unity3D 入门:如何制作天空效果?天空盒的使用

在 Unity 编辑器的主界面中我们可以很容易制作各种场景物体,但天空如何制作呢?本文内容了解和设置默认的天空盒在资源商店中下载天空盒总结了解和设置默认的天空盒在新建一个 Unity3D 项目之后,我们在空空如也的场景下看到的那蓝灰过渡的画面,其实就是 Unity3D 默认提供的“天空”,这个机制叫“天空盒”(Skybox)。你可以在 Window->Rendering->Lighting Settings(窗口->渲染->照明设置)中打开当前场景的照明设置,里面可以设置天
原创
1062阅读
0评论
0点赞
发布博客于 9 月前

Unity3D 入门:如何在脚本中找到游戏对象的父子级 祖孙级对象和它们的组件

在真正能玩的游戏场景中,很多脚本的执行是在不确定的游戏对象上进项的,于是会考虑在父对象或者子对象上去写脚本。这时,可能需要查找游戏对象。那么如何在脚本中找到父子游戏对象(gameObject)呢?本文内容场景找父组件/子组件找父对象/子对象场景如下图所示,Windows 游戏对象下面可能有很多不确定数量和位置的游戏对象,需要操作它们。在为游戏对象创建脚本的时候,这个脚本中的类会继承自 MonoBehavior:using UnityEngine;public class WindowUpd
原创
657阅读
0评论
2点赞
发布博客于 9 月前

Unity3D 入门:如何管理 Unity 项目中的 NuGet 包?使用第三方 NuGet 包管理器——NuGetForUnity

Unity 项目虽然可使用 C# 项目作为脚本,却并没有提供一种类似 NuGet 的第一方包管理器。不过,还是有第三方包管理器可以用,为 C# 脚本应用现有的库提供方便。本文内容NuGetForUnity安装 NuGetForUnity使用 NuGetForUnity安装 NuGet 包还原 NuGet 包还有没有其他包管理方案?NuGetForUnity第三方适用于 Unity 的 NuGet 包管理器推荐:GlitchEnzo/NuGetForUnity: A NuGet Package M
原创
1084阅读
9评论
0点赞
发布博客于 9 月前

Unity3D 入门:让 C# 脚本公开可在 Unity 编辑器中设置的属性

将一部分参数从 C# 脚本中抽离出来,可以让 C# 脚本在 Unity 项目中更通用,适用于更多游戏对象(gameObject)。本文介绍如何创建可在 Unity 编辑器中设置属性的 C# 脚本,并介绍如何在 Unity 编辑器中设置它们。本文内容简单的 C# 脚本公开字段在哪里修改值有趣的名称简单的 C# 脚本本文的例子取自于我的另一篇博客:Unity3D 入门:最简单的控制视角,以及控制角色前进、转向的脚本 - walterlvusing UnityEngine;public cl
原创
980阅读
0评论
0点赞
发布博客于 9 月前

Unity3D 入门:Unity 项目版本管理建议使用的 .gitignore 忽略文件和 .gitattributes 文件(2020年4月更新)

Unity3D 项目虽然说使用 C# 脚本开发,但毕竟不是 .NET/C# 项目。今天一位小伙伴告诉我说用错了 .gitignore 文件,结果管理仓库时丢了很多重要的文件。实际上,GitHub 官方提供了大量不同项目类型的 .gitignore 文件,并且有广大的社区支持时时更新,直接前往 GitHub 官网下载是最好的选择了。适用于 Unity 项目的 .gitignore 模板:gitignore/Unity.gitignore at master · github/gitignore#
原创
724阅读
0评论
0点赞
发布博客于 9 月前

Unity3D 入门:Unity Editor 编辑器常用快捷键

本文为 Unity3D 入门小伙伴整理 Unity 编辑器中的常用快捷键。本文内容调节工具视图调节窗口调整进入退出播放模式所有快捷键调节工具Unity 编辑器左上角的一组按钮,正好也对应着键盘左上角的字母:图标[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-17NMWB0q-1593478731245)(/static/posts/2020-05-05-17-29-17.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img
原创
540阅读
0评论
0点赞
发布博客于 9 月前

Linux Shell 中需要转义的字符

本文整理 Linux Shell 中的转义字符。在 Linux Shell 中,有很多字符是有特殊含义的,如果期望把这个字符当作普通字符来处理,需要经过 \ 的转义。本文内容在双引号中即可变普通字符的特殊字符空格 '\ `星号 '\*`井号 `#`换行符即便在引号中也依然被 Shell 解释的特殊字符双引号 '\"'反引号 `` ` ``美元符 `\$`反斜杠 `\`任意字符在双引号中即可变普通字符的特殊字符 *空格 '\ `这是转义空格。如果路径中包含空格,那么使用 \ 转义可以避免路径被分
原创
6052阅读
0评论
0点赞
发布博客于 9 月前

git 乱改你的换行符?一句话设置让 git 不再碰你某个文件的换行符

前些天有位小伙伴告诉我说 git 改了某个重要文件的换行符,导致文件的哈希变了,于是文件校验出现错误。之前一直没问题而最近才有问题是因为最近换了部署服务器,git 的换行符配置不一样。其实,我们不应该让代码仓库如此容易受到外界环境的影响。所以本文会解释 git 的全局配置如何影响了 git 对换行符的处理,然后说说如何彻底解决这个问题。本文内容关于换行符问题解决原因关于换行符\r = CR = Carriage-Return = 回车
= LF = Line-Feed = 换行\r
原创
605阅读
0评论
0点赞
发布博客于 9 月前

.NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径

Windows 下的路径分隔符是 \ 而 Linux 和 Mac 下的路径分隔符是 \。正常如果你的数据不跨 Windows 和 Linux 平台流通的话,不怎么会遇到多种换行符并存的问题的。但如果真发生了流通,那么如何将它们格式化为统一的当前平台认识的分隔符呢?本文内容现有方案没有原生方案(.NET)为什么 .NET 原生不做统一化?自己实现简单省事型高性能型如何避免现有方案没有原生方案(.NET)System.IO.Path 带了一堆方法用来处理路径。各大文档博客和书籍也都推荐大家使用 Pat
原创
162阅读
0评论
1点赞
发布博客于 9 月前

.NET Windows:删除文件夹后立即判断,有可能依然存在

如果你不了解本文的内容,可能会在未来某个时候踩坑–你可能在判断文件夹是否存在的时候得到错误的返回值。本文内容删除文件(夹)测试程序原因解决方法删除文件(夹)使用 .NET 带的删除文件夹的方法:Directory.Delete("D:\walterlv");或者使用其他删除文件(夹)的方法,大多数是以下 Windows API 的封装:BOOL DeleteFile( LPCTSTR lpFileName);BOOL RemoveDirectoryA( LPCSTR lpPath
原创
156阅读
0评论
0点赞
发布博客于 9 月前

.NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)

垃圾回收机制有一些未定义部分,一般来说不要依赖于这些未定义部分编程,否则容易出现一些诡异的 bug 或者不稳定的现象。本文介绍局部变量这部分的细节,而这点在 .NET Framework 和 .NET Core 默认情况下的表现有差别。本文内容问题代码原因问题代码看看下面这段代码,你觉得会输出 Foo is collected 吗?class Program{ static void Main(string[] args) { new WeakReference
原创
302阅读
0评论
0点赞
发布博客于 9 月前

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

本文介绍使用 dotnet test 命令进行单元测试的时候,过滤出被测项目中的一部分测试出来,仅测试这一部分。@TOC背景建一个 .NET Core 的单元测试项目,例如项目名字是 Walterlv.Demo.Tests。举例其中的一个测试类如下:using Microsoft.VisualStudio.TestTools.UnitTesting;namespace Walterl...
原创
277阅读
0评论
0点赞
发布博客于 10 月前

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

在 XAML 中写绑定是 WPF 学习的必修课,进阶一点的,是用 C# 代码来写绑定。然而一旦绑定的属性是附加属性,好多小伙伴就会开始遇到坑了。本文将介绍如何在 XAML 和 C# 代码中绑定附加属性。@TOC背景代码开始遇到这个问题的背景是我定义了一个附加属性,然后试图通过绑定的方式完成一些业务。用附加属性来完成的很大一个好处在于不需要改动原有的代码破坏原来的类。例如我只需要在任何一...
原创
338阅读
0评论
0点赞
发布博客于 10 月前

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

最近需要处理几十万行的文字,然后提取出数千行(嗯,我在做输入法词库)。在 VSCode 里我用正则匹配到了想要的结果后,如何能够快速把这些行提取出来呢?其实非常简单,Alt + Enter 即可选中所有已经匹配到的文字。来,我们看这个具体的例子:这里有一个几十万行的词库,我需要将其中的英文部分提取出来做成单独的词库。于是我使用正则表达式,匹配到所有英文词。接着,按下 Alt + Ent...
原创
4404阅读
0评论
2点赞
发布博客于 10 月前

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

实际上本文不看也罢,因为整个过程除了网速之外基本没啥坑。不过装完可能有一些配置,所以如果不知道的话可以参考本文。@TOC安装我们共需要安装两款应用:Visual Studio 2019 及 Unity 编辑器组件Unity Hub这两款应用安装不分先后,不过建议全部都安装完后再启动,避免单独启动无法运行使用的问题。安装 Visual Studio 2019 的 Unity 编辑...
原创
1947阅读
0评论
4点赞
发布博客于 10 月前

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

Windows Terminal 在 Windows 上是一款 UWP 应用,然而其依然具有良好的与外部工具的集成特性,你可以在其他各种工具中配置使用 Windows Terminal 打开。本文介绍如何配置使用 Windows Terminal 打开。@TOC命令行调用在应用商店可以下载到 Windows Terminal (Preview),下载安装后,你就可以开始使用 wt 命令了...
原创
370阅读
0评论
0点赞
发布博客于 10 月前

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

Visual Studio 安装过程中一起勾选的 Visual Studio Tools for Unity 提供了与 Unity 编辑器方便的交互功能,充分使用 Visual Studio Tools for Unity 可以提升一部分开发效率减少一点点坑。@TOCVisual Studio Tools for Unity我在 Unity3D 入门:安装 Unity3D 并配置与 Vis...
原创
732阅读
1评论
0点赞
发布博客于 10 月前

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

Visual Studio 2019 (16.5) 版本更新中带来了一项很小很难注意到却非常实用的功能,查看哪一个托管线程正在持有 .NET 对象锁。如果你不了解这个功能如何使用,那么可以阅读本文。@TOC更新日志Visual Studio 的官方更新日志中对此功能的描述:View which managed thread is holding a .NET object lock...
原创
643阅读
0评论
0点赞
发布博客于 10 月前

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

一般来说,大家在需要监听全局消息的时候会考虑 SetWindowsHookEx 这个 API。或者需要处理一些非自己编写的窗口的消息循环的时候,也会考虑使用它。如果要知道如何使用这个 API,你可以在网上搜到大量这样的文章/博客/教程/文档,然而大多不会提及使用此 API 时遇到的一些坑。阅读本文,你当然也可以知道应该如何使用这个 API,但同时也能了解如何正确使用以避免一些奇怪的问题。@T...
原创
891阅读
0评论
0点赞
发布博客于 10 月前

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

一直在使用 WebClient 下载文件,.NET 已经封装好,所以用起来代码非常简洁;但直到今天发现有一个文件一直不能正确下载下来。本文介绍这个问题的原因和解决方法,更重要的是给出调查方法。@TOC本文所涉及到的域名已经过敏感信息处理,所以实际上你是无法访问到的;但这不影响本文对调查方法的描述。问题我原本是使用如下的代码去下载任意文件的(参数经过简化)。private static...
原创
221阅读
0评论
1点赞
发布博客于 10 月前

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

今天有小伙伴在评估某类线程安全问题的时候,怀疑到静态构造函数里面去了。于是就有了本文。@TOC静态构造函数的执行时机根据官方文档 Static Constructors - C# Programming Guide 所述:A static constructor is called automatically to initialize the class before the fir...
原创
273阅读
0评论
0点赞
发布博客于 10 月前

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

因为 Visual Studio 有强大的包管理器插件,所以即便是不熟悉 NuGet 命令的小伙伴也能轻松安装和管理 NuGet 包。不过,对 Unity C# 项目来说,你并不能直接引用 dll,也不能直接使用自带的 NuGet 包管理器完成 NuGet 包安装。本文介绍原因和真正的引用方法。@TOC背景对于传统 .NET/C# 的开发者来说,在解决方案中管理 NuGet 包,在 C#...
原创
1704阅读
1评论
2点赞
发布博客于 10 月前

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

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

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

在 WPF 中打开一个 Popup 并没有想象当中容易。虽说提供了一个 IsOpen 属性用于显示 Popup,但实际上造成的 Bug 会让你解得死去活来。Win32 的 WS_POPUP 也坑,不过 WPF 会额外再带来一些,所以本文只说 WPF。@TOC先说结论本文一开始就贴出打开一个 Popup 的代码// 在以下代码中,我们假定 popup 是我们要显示出来的 Popup,而 t...
原创
202阅读
0评论
0点赞
发布博客于 10 月前

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

你可能有很多原因要将一个命令重复执行多次,本文介绍在多个平台下如何多次重复执行命令。@TOC背景最近遇到一个偶然复现的单元测试错误,于是在每次运行时,打算重复运行多次来调查问题是否已经解决。实际上,重复执行命令有更多用途:通过重复执行来复现一些偶发的问题执行一组命令,每次只有参数不同大大减轻手工输入命令的工作量BashLinux 或者 Mac 系统的终端中,可以使用 for...
原创
871阅读
0评论
0点赞
发布博客于 10 月前

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

你一定要为你的 Windows 用户账户设置密码,一来会安全一些,而来可以远程登录使用;但有时出于一些特殊的目的,不希望在每次开机后都必须输入密码才能进入系统。于是你可以使用本文提供的方法在每次开机的时候免密码登录到 Windows 操作系统。@TOC步骤在 Windows 搜索框中输入 netplwiz,然后回车打开命令;去掉“要使用本计算机,用户必须输入用户名和密码”的勾勾;点击...
原创
880阅读
0评论
0点赞
发布博客于 10 月前

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

管理服务程序的时候,可能会查询某个端口当前被哪个进程占用。不仅能找出有问题的进程将其处理掉,也可以用来辅助检查某个程序是否开启了服务并在监听端口。@TOCWindows 系统Windows 系统上可以使用 PowerShell 命令来查询占用某个端口的程序。比如,我们需要查询 5000 端口被占用的进程是谁,可以在 PowerShell 中输入命令:Get-Process -Id (G...
原创
376阅读
0评论
0点赞
发布博客于 10 月前

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

响应式布局在各种现代的 UI 框架中不是什么新鲜的概念,基本都是内置支持。然而在古老的 WPF 框架中却并没有原生支持,后来虽然通过 Blend 自带的 Interactions 库实现了响应式布局,但生成的代码量太大了,而且需要引入额外的库。如果只是希望临时局部地方使用响应式布局,那么其实可以直接使用 WPF 内置的绑定机制来完成响应式布局。本文介绍如何使用。思路是在控件尺寸发生变更的时候...
原创
269阅读
0评论
0点赞
发布博客于 10 月前

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

做无边框窗口之后,我们有方法可以让窗口的标题栏区域和边缘调大小的区域继续正常工作,直到——这个窗口上面覆盖了其他的子窗口。这个子窗口会吃掉消息导致父窗口的边缘无法再继续处理这些消息。@TOC子窗口遮挡了父窗口看一下下面的动画,这个窗口的下半部分放了一个子窗口。然后尝试在边缘调节窗口尺寸,会发现被子窗口覆盖的部分是无法完成窗口大小调节的。究其原因,是子窗口处理掉了与调窗口大小相关的消...
原创
301阅读
0评论
0点赞
发布博客于 10 月前

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

因为以前对域名进行了一些调整,所以实际上我的博客在历年来经历了两个域名 blog.walterlv.com(新)和 walterlv.com(旧)。然而 GitHub Pages 只支持一个自定义域名,所以为了兼容旧域名的访问,如何可以让多个域名对应同一个 GitHub Pages 呢?@TOC背景<blog.walterlv.com> (新)walterlv.com (旧...
原创
492阅读
0评论
0点赞
发布博客于 10 月前

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

创建窗口的时候,可以传一个消息处理函数。然而如果窗口不是自己创建的,还能增加消息处理函数吗?答案是可以的,除了 SetWindowsHookEx 来添加钩子之外,更推荐用子类化的方式来添加。本文介绍如何通过子类化(SubClass)的方式来为窗口添加额外的消息处理函数。@TOC子类化子类化的本质是通过 SetWindowLong 传入 GWL_WNDPROC 参数。SetWindowL...
原创
184阅读
0评论
0点赞
发布博客于 10 月前

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

获取图片宽高的方法有很多种,本文介绍 .NET 中获取图片宽高的几种方法并评估其性能。如果你打算对大量图片进行一些处理,本文可能有用。本文内容本文即将评估的方法`System.Drawing.Imaging.Metafile``System.Drawing.Bitmap``System.Windows.Media.Imaging.BitmapImage``System.Windows.Medi...
原创
264阅读
0评论
0点赞
发布博客于 1 年前

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

Windows 10 每次新发布一个版本都会遇到各种各样的新型 Bug。本文介绍的是 Windows 10 的设置界面里面,各种各样的语言文字都很混乱,就像统一错位了一样。本文也会同时介绍其修复方法。本文内容系统版本混乱的界面修复方法将语言切换回英文删除中文语言包删除下载缓存文件重新下载中文语言包系统版本会出现此问题的系统是 Windows 10 英文版系统。注意,是 Windows ...
原创
755阅读
1评论
0点赞
发布博客于 1 年前

Linux 系统根目录下的文件夹

本文介绍 Linux 系统根目录下的各种文件夹及其用途,了解这些目录可以帮助你更好地管理你的 Linux 主机。本文内容Linux 系统根目录Linux 系统根目录各个不同 Linux 发行版的根目录会有一些区别,但大多数发行版的主要的目录都是有的。/bin binary 用于存放经常使用的命令/boot boot 启动时的一些核心文件/dev device 外部设备/etc 用...
原创
352阅读
0评论
0点赞
发布博客于 1 年前

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

因为 VPS 上预装的操作系统我并不习惯,所以打算重装一个。有的 VPS 服务商提供了较多种类的系统选择,有的却没有。如果你发现你希望重装的系统服务商没有提供,可以考虑自己安装。本文内容重装脚本 - 来自萌咖CentOS -> Debian重装脚本 - 来自萌咖以下是来自萌咖的一键重装脚本的发布贴:[ Linux VPS ] Debian(Ubuntu)网络安装/重装系统一键脚本...
原创
1544阅读
0评论
0点赞
发布博客于 1 年前

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

Web 服务需要配置监听的 IP 和端口才可以对外提供真正的服务。本文介绍如何设置 ASP.NET Core 程序监听的 IP 和端口。ASP.NET Core 程序默认集成了 Kestrel 服务器,可以直接对外提供 Web 服务。虽然可以直接提供服务,但通常建议使用反向代理服务器来间接提供服务。因此,本文建议的大多数设置监听 IP 和端口的方法都是“临时方法”,即那种“配置出来”的方法,而...
原创
1277阅读
0评论
0点赞
发布博客于 1 年前

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

到现在还不为你的网站添加 https 的话,浏览器已经会非常显眼地显示“不安全”了。感谢 Let’s Encrypt,感谢 buypass,个人使用申请 https 证书的话已经可以免费了。本文内容关于域名第一步:输入域名第二步:填写邮箱第三步:安装并用 KeyManager 打开第四步:验证域名第五步:点击验证第六步:导出证书最后关于域名我们使用 FreeSSL.org 申请的是域名证...
原创
527阅读
0评论
0点赞
发布博客于 1 年前

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

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。在众多反向代理应用中,frp 的最大特点就在于内网穿透。所以,如果你有将内网对外提供 Web 服务的需求,就可以考虑使用 frp 为你的 Web 服务提供 https 支持。本文内容下载 frp准备好 Web 服务和 SSL ...
原创
721阅读
1评论
1点赞
发布博客于 1 年前

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

如果你有一些需要重定向网页 URL 的情况,可以返回 HTTP 状态码 301/302 告诉浏览器或者搜索引擎访问新的 URL。本文描述如何在 ASP.NET Core 中进行重定向。本文内容HTTP 状态码 301/302ASP.NET Core重定向中间件重定向小心缓存HTTP 状态码 301/302301 表示“Moved Permanently”,即永久移动。通过返回此状态码可以告...
原创
2222阅读
0评论
0点赞
发布博客于 1 年前

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

虽然使用 Visual Studio 创建 ASP.NET Core 程序的时候可以选择是否添加 https 支持,不过这种方式只添加了 localhost 的证书,只有本地访问时浏览器才会承认。真正对外公开服务的时候这样是绝对没法儿提供 https 服务的。本文介绍使用三种不同的方式添加 https 的支持,三种方法各有优劣,本文会进行比较并给出不同的适用场景。你自己选择就好。本文内容你需...
原创
432阅读
0评论
0点赞
发布博客于 1 年前

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

Kestrel 是一个跨平台的适用于 ASP.NET Core 的 Web 服务器。它内置集成在了 ASP.NET Core 项目模板中,所以编写和对外开放一个 Web 服务会非常简单。虽然不推荐直接使用 Kestrel 对外提供 Web 服务,但为了简单的话,临时使用也是非常不错的选择。Kestrel 是一个跨平台的适用于 ASP.NET Core 的 Web 服务器。Kestrel 只...
原创
695阅读
0评论
0点赞
发布博客于 1 年前

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

Windows 打开文件的 API 中提供了多种不同的文件打开方式。你可以根据你的业务场景选择适合你的文件打开方式。本文内容Windows API`dwCreationDisposition``CREATE_NEW``CREATE_ALWAYS``OPEN_EXISTING``OPEN_ALWAYS``TRUNCATE_EXISTING`Windows APIOpenFile 方法只能打开...
原创
379阅读
0评论
1点赞
发布博客于 1 年前

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

.NET 中文件打开的 API File.Open 提供了多种不同的文件打开方式,这些方式大多数与 Windows 文件 API 中的模式是对应的,但也有一些 .NET 层面的判断以及名称的变化。在 .NET 层你可以选择适合你业务场景需要的文件打开方式。本文内容文件打开方式`FileMode``CreateNew``Create``Open``OpenOrCreate``Truncate``...
原创
261阅读
1评论
1点赞
发布博客于 1 年前

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

WPF 框架设计为与 DPI 无关,但你依然可能遇到 DPI 问题。尤其是 Image 控件显示的图片会根据图片 EXIF 中的 DPI 信息和屏幕 DPI 自动缩放图片。对于 UI 用图来说这是好事,但对于软件用户随便插入的图片来说就不是了——用户传入的图片可能是各种各样不统一的 DPI。因此这种 DPI 我们应该忽略。本文内容解决方法`DrawingImage`解决方法直接设置 Ima...
原创
157阅读
0评论
0点赞
发布博客于 1 年前

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

如果你编写线程安全代码时为了省事儿直接 lock(this),或者早已听说不应该 lock(this),只是不知道原因,那么阅读本文可以帮助你了解原因。本文内容原因实例扩展lock 公开的属性lock 字符串lock 其他任何可能被其他对象获取的公开对象结论原因不应该 lock(this) 是因为你永远不知道别人会如何使用你的对象,永远不知道别人会在哪里加锁。于是稍不注意就可能死锁!实例...
原创
182阅读
0评论
0点赞
发布博客于 1 年前

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

非泛型版本的 ICollection 中有 IsSynchronized 属性和 SyncRoot 属性,这两个属性被用来设计成以线程安全的方式访问和修改集合。不过这个设计让线程安全的访问由集合的实现方转嫁到了调用方,导致要么很难实现,要么很难调用。虽然泛型版本的 ICollection<T> 已经改进了设计,不再引入 SyncRoot 这样的属性到接口中,但如果我们在某些场景下需要...
原创
214阅读
0评论
0点赞
发布博客于 1 年前

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

在解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。。其原因是所解压的文件并非 zip 文件。本文内容异常原因异常在解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。 在 System.IO.Compression.ZipArchive.Read...
原创
1632阅读
0评论
0点赞
发布博客于 1 年前

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

C# 8.0 为我们带来了异步流,可以使用 async foreach,不过使用此语法需要 IAsyncEnumerable / IAsyncEnumerator 类型。本文介绍如何在旧版本的 .NET Framework 和旧版本的 .NET Core 中获得此类型。本文内容异步流所需版本安装 Microsoft.Bcl.AsyncInterfaces使用异步流定义支持异步流的方法使用 aw...
原创
385阅读
0评论
0点赞
发布博客于 1 年前

为 .NET 各种开发工具设置网络代理,提升在大陆的网络性能

git、nuget、scoop 如何设置网络代理提升网络访问速度呢?本文内容git使用命令行设置直接修改配置文件使用 TortoiseGit 设置NuGet在命令行中设置直接修改配置文件Scoop在下面的博客正文中,都假设我的本机搭设了代理服务,其中 SOCKS5 代理服务的端口号是 7777,HTTP 代理服务的端口号是 7778。git使用命令行设置git 支持设置 http 代理...
原创
240阅读
0评论
0点赞
发布博客于 1 年前

Windows 系统文件资源管理器的命令行参数(如何降权打开程序,如何选择文件)

大多数用户还是习惯使用 Windows 自带的文件资源管理器来管理文件,于是我们可以利用它的命令行参数来帮助我们做一些与之相关的交互。本文会以实际的例子来说明如何使用 explorer.exe 的命令行参数。本文内容打开文件启动程序打开某个文件夹选择某个文件其他命令行参数一些特殊文件夹的命令打开文件在命令行中输入 explorer D:\Services\blog.walterlv.co...
原创
565阅读
1评论
0点赞
发布博客于 1 年前

文件被占用?系统自带的“资源监视器(resmon)”也能帮你找到占用它的真凶

文件或文件夹被占用,然后无法删除?这真的很恼人。关键是还不知道究竟是哪个程序占用的,想退出都不行。有各种工具解决此问题,平时下载屯着他们能够省下不少事儿。如果突然间情况非常紧急怎么办?学会使用本文介绍的系统自带工具“资源监视器”,也能立即着手找到真凶!删除拒绝提示:▲ 文件夹访问被拒绝 1即便点了继续,依然拒绝:▲ 文件夹访问被拒绝 2现在,去搜索框(小娜)中搜索“资源监视器”。...
原创
603阅读
0评论
0点赞
发布博客于 1 年前

.NET 编写一个可以异步等待循环中任何一个部分的 Awaiter

林德熙 小伙伴希望保存一个文件,并且希望如果出错了也要不断地重试。然而我认为如果一直错误则应该对外抛出异常让调用者知道为什么会一直错误。这似乎是一个矛盾的要求。然而最终我想到了一个办法:让重试一直进行下去,谁需要关心异常谁就去 catch 异常,不需要关心异常的模块则跟着一直重试直到成功。我们通过编写一个自己的 Awaiter 来实现,本文将说明其思路和最终实现的代码。本文内容Awaite...
原创
241阅读
1评论
0点赞
发布博客于 1 年前

git 如何更可靠地解决冲突?

使用 git 合并代码时出现冲突是很常见的,不过如何解冲突才能更加可靠呢?不漏掉别人的修改,也同时让自己的修改完全保留。本文将介绍利用各种工具更可靠地解决冲突。本文内容使用 Visual Studio使用 Visual Studio如果你使用 Visual Studio,那么当合并两个分支出现冲突的时候,Visual Studio 的 Team Explorer 会显示当前冲突的所有文件...
原创
143阅读
0评论
0点赞
发布博客于 1 年前

了解 .NET/C# 程序集的加载时机,以便优化程序启动性能

林德熙在 C# 程序集数量对软件启动性能的影响 一文中说到程序集数量对程序启动性能的影响。在那篇文章中,我们得出结论,想同类数量的情况下,程序集的数量越多,程序启动越慢。额外的,不同的代码编写方式对程序集的加载性能也有影响。本文将介绍 .NET 中程序集的加载时机,了解这个时机能够对启动期间程序集的加载性能带来帮助。本文内容程序集加载方式对性能的影响程序集的加载时机程序集加载方式对性能的影...
原创
230阅读
0评论
0点赞
发布博客于 1 年前

用 dotTrace 进行性能分析时,Timeline 打不开?无法启动进程?也许你需要先开启系统性能计数器的访问权限

对 .NET 程序使用 dotTrace 进行性能分析时,你也可能遭遇到 dotTrace 的 Bug。我就遇到了性能分析选项 Timeline 打不开进程的情况。本文内容dotTrace 的性能分析选项Timeline 打不开?解决方法启动“计算机管理”配置性能监视器用户组添加自己作为用户组的成员你已经完成了dotTrace 的性能分析选项dotTrace 启动性能分析的选项有四个,你可...
原创
263阅读
0评论
0点赞
发布博客于 1 年前

在 Visual Studio Code 中添加自定义的代码片段

无论是那个编辑器,如果能够添加一些自定义代码片段,能够大大提升代码的输入效率。本文介绍如何在 Visual Studio Code 中添加自定义代码片段。本文内容Visual Studio Code 的代码片段设置编写代码片段插入代码片段一个更复杂的例子关于代码片段编写的更多细节关于文件名称光标停留点(Tabstop)占位符下拉选项变量Visual Studio Code 的代码片段设置...
原创
570阅读
0评论
0点赞
发布博客于 1 年前

在 Visual Studio 中使用 EditorConfig 统一代码风格(含原生与插件)

EditorConfig 是一种被各种编辑器广泛支持的配置,使用此配置有助于项目在整个团队中保持一致的代码风格。Visual Studio 2017 开始原生支持 EditorConfig。本文将介绍 Visual Studio 对 EditorConfig 的支持情况(含原生与插件),并给出符合 .NET 和 C# 约定的 EditorConfig 详细设置。本文内容EditorConfi...
原创
415阅读
0评论
0点赞
发布博客于 1 年前

在 Visual Studio Code 中为代码片段(Code Snippets)添加快捷键

Visual Studio Code 默认是关闭了 Markdown 的智能感知提示的(因为真的是不好用,尤其是其没有中文分词的情况下)。那么在没有智能感知提示的情况下如何快速插入代码片段呢?可以使用快捷键!本文介绍如何为代码片段绑定快捷键。代码片段本没有快捷键相关的字段可供设置的,不过在快捷键设置中可以添加代码片段相关的设置。首先,在 Visual Studio Code 中打开快捷键...
原创
1187阅读
0评论
0点赞
发布博客于 1 年前

WPF 中那些可跨线程访问的 DispatcherObject(WPF Free Threaded Dispatcher Object)

众所周知的,WPF 中多数对象都继承自 DispatcherObject,而 DispatcherObject 带给这些对象一个特点:不能跨线程访问。不过,WPF 中依然存在一些例外。本文将介绍 WPF 那些可跨线程访问的 DispatcherObject,如何充分利用这个特点提高应用程序的性能,以及如何自己编写这样的 DispatcherObject。本文内容什么样的 Dispatcher...
原创
111阅读
0评论
0点赞
发布博客于 1 年前

C#/.NET 中 Thread.Sleep(0), Task.Delay(0), Thread.Yield(), Task.Yield() 不同的执行效果和用法建议

在 C#/.NET 中,有 Thread.Sleep(0), Task.Delay(0), Thread.Yield(), Task.Yield() 中,有几种不同的让当前线程释放执行权的方法。他们的作用都是放弃当前线程当前的执行权,让其他线程得以调度。但是他们又不太一样。本文说说他们的原理区别和用法区别。本文内容原理区别Thread.Sleep(0)Thread.Yield()Thread...
原创
420阅读
0评论
0点赞
发布博客于 1 年前

csproj 文件中那个空的 NuGetPackageImportStamp 是干什么的?

当我们在传统格式的 csproj 项目文件中安装 NuGet 包后,有时会在项目文件中发现空的 NuGetPackageImportStamp 节点。这个空的节点让我们这波强迫症患者觉得有点难以接受,关键是手工删除之后也没发现有什么副作用。那么为什么会出现这个节点?它究竟有什么作用?本文内容空的 NuGetPackageImportStamp 节点什么情况下会出现 NuGetPackageI...
原创
112阅读
0评论
0点赞
发布博客于 1 年前

使用并解析 OPML 格式的订阅列表来转移自己的 RSS 订阅(概念篇)

OPML 全称是 Outline Processor Markup Language ,即 大纲处理标记语言。目前流行于收集博客的 RSS 源,便于用户转移自己的订阅项目。本文将介绍这个古老的格式,并提供一个 .NET 上的简易解析器。本文分为两个部分,一个是理解 OPML 格式,一个是解析此格式:概念篇(本文)解析篇本文内容OPML 格式典型的 OPML 文件OPML 文件中的节...
原创
1135阅读
0评论
0点赞
发布博客于 1 年前

使用并解析 OPML 格式的订阅列表来转移自己的 RSS 订阅(解析篇)

OPML 全称是 Outline Processor Markup Language ,即 大纲处理标记语言。目前流行于收集博客的 RSS 源,便于用户转移自己的订阅项目。本文将介绍这个古老的格式,并提供一个 .NET 上的简易解析器。本文是两个部分的第二篇,前者是理解 OPML 格式,此篇是解析此格式:概念篇解析篇(本文)本文内容OPML 格式创建适用于 RSS 的简易 OPML...
原创
902阅读
0评论
0点赞
发布博客于 1 年前

UWP 中的各种文件路径(用户、缓存、漫游、安装……)

UWP 提供了多种不同文件路径访问方式,对应到不同的文件路径中。可能我们只是简单用 ApplicationData.Current 获取一下可以读写的路径便能应付我们应用日常所需的各种文件读写需求,不过,UWP 还提供了更多的路径选项。本文将和你一起总结 UWP 中的各种各样的路径。本文内容UWP 中的路径种类ApplicationDataPackage.InstalledLocation特...
原创
809阅读
0评论
0点赞
发布博客于 1 年前

只有你能 new 出来!.NET 隐藏构造函数的 n 种方法(Builder Pattern / 构造器模式)

如果你给类写了一个公有构造函数,那么这个类就能被其他开发者 new 出来。如果你不想让他们 new 出来,把构造函数 private 就好了呀。然而还有更多奇怪的方式来隐藏你类的构造方法。为什么要隐藏构造函数?有些类型,只有组件的设计者才知道如何正确创建其类型的实例,多数开发者都无法正确将其创建出来。典型的如 string:绝大多数开发者都不能正确创建出 string 的实例,但通过写一...
原创
214阅读
0评论
0点赞
发布博客于 1 年前

使用 Postman 调试 ASP.NET Core 开发的 API

使用 ASP.NET Core 开发简单的后台 API 还是非常容易的。涉及到 GET 请求的调试我们可以用浏览器简单搞定,那么 POST/PUT/DELETE 这样的请求呢?本文将使用 Postman 来调试这些请求。本文内容简单的 ASP.NET Core 程序模拟 GET 请求下载安装 Postman模拟 POST 请求模拟 PUT / PATCH / DELETE / … 请求关于本...
原创
788阅读
0评论
2点赞
发布博客于 1 年前

.NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)

这里我想说的是类型“实例”的缓存,适用于那些实例或者值计算很耗时的操作。典型的场景如反射获取 Attribute。本文内容适用思路代码用法高性能创建对象高性能为属性赋值高性能“反射”调用函数附代码适用本文推荐的方法适用于相同的输入可以获得相同的输出,但是这个输入到输出的过程非常耗时。大家都知道反射是很耗时的,尤其是获取 Attribute 和反射调用实例的方法。而从一个反射的成员中得到其...
原创
363阅读
0评论
0点赞
发布博客于 1 年前

如何精准地用打印机在贺卡或邀请函上打字

当你有一堆带有空位的贺卡或邀请函,你是准备手写呢,还是准备打字呢?你的旁边恰巧有一位书法漂亮的 MM 那自不必说,然而如果字都像我这样写得丑,那还是选择打字好了。然而,贺卡或邀请函不同于白纸,通常都是已经打印好有内容的。那么如何打印以便让所有文字的内容都对应到贺卡或邀请函的正确空位上,还是有些难度的。本文将教你如何在毫米级别将文字精准地打印到贺卡或邀请函上。准备:工具你的贺卡或邀请函(...
原创
980阅读
0评论
0点赞
发布博客于 1 年前

Windows 无法删除文件夹 —— 访问被拒绝 / 因为目录不是空的"

在日常使用 Windows 10 时,有时会遇到删除很普通的文件夹时提示“访问被拒绝”,以管理员权限重试后依然提示没有权限。如果使用命令行删除,则会提示“无法删除文件夹 XXX,目录不是空的。”。本文将介绍其原因并提供解决方案。本文内容删除文件夹遭到拒绝解决方案删除文件夹遭到拒绝有时我们在删除一个很普通的文件夹时,会提示需要提升权限才能删除。▲ 需要提升权限其实按照经验,这种问题与...
原创
4278阅读
1评论
0点赞
发布博客于 1 年前

发布了一款库(或工具包),如何持续地编写更新日志(ChangeLog)?

据说程序员最讨厌的两件事是 “别人没有写文档” 和 “要我写文档”。编写更新日志可是也落入此怪圈呢!本文内容程序员不写文档自动化更新日志应该包含哪些内容手工和自动化的结合优秀文档的参考程序员不写文档来自 GitHub 的开源调查问卷结果直接显示,最令人头痛的莫过于文档了:Incomplete or outdated documentation is a pervasive probl...
原创
221阅读
0评论
0点赞
发布博客于 1 年前

使用 C# 代码创建快捷方式文件

快捷方式是一种特殊的文件,扩展名为 lnk。有很多种方式来创建快捷方式,不过使用 C# 代码创建一个却并不那么容易。本文分享三种不同的方式创建快捷方式。随处可用的代码这是最方便的方式了,因为这段代码随便放到一段代码中就能运行:/// <summary>/// 为当前正在运行的程序创建一个快捷方式。/// </summary>/// <param nam...
原创
368阅读
0评论
0点赞
发布博客于 1 年前

UWP 应用中 CoreApplication / Application, CoreWindow / Window 之间的区别

在 StackOverflow 上看到有小伙伴询问 CoreApplication, CoreApplicationView, Application, ApplicationView, CoreWindow, Window 它们的含义以及它们之间的区别。于是我整理了这篇文章。This post is written in multiple languages. Please select ...
原创
440阅读
0评论
0点赞
发布博客于 1 年前

图片点击放大,你的网页也能做到!

我经常在博客中插入大图,然而总需要借助浏览器的滚轮缩放功能放大观看实在是不方便。于是我希望做一个点击即放大的功能。下面就是一张可点击放大的图片,你可以点击试试!当然,我期望的效果是自动对所有博客中的图片生效。▲ Fluent Design App Header本文内容创建一个用于放图片的 HTML 节点为图片的 HTML 节点添加 CSS 样式添加放大图片的 JS 脚本专为 Jekyll...
原创
340阅读
0评论
0点赞
发布博客于 1 年前

UWP 扩展/自定义标题栏的方法,一些概念和一些注意事项

在 Windows 10 的前几个版本中将页面内容扩展到标题栏上还算简单,主要是没什么坑。直到一些新控件的引入和一些外观设计趋势变化之后,扩展标题栏开始出现一些坑了。本文将重温 UWP 自定义标题栏或者扩展标题栏的方法,但更重要的是解决一些坑。本文内容扩展/自定义标题栏一些概念一些坑控件在标题栏区域无法交互更高的标题栏,或者被遮挡在什么时机调用?适配移动设备扩展/自定义标题栏要扩展标题栏...
原创
246阅读
0评论
0点赞
发布博客于 1 年前

理解 UWP 视图的概念,让 UWP 应用显示多个窗口(多视图)

UWP 应用多是一个窗口完成所有业务的,事实上我也推荐使用这种单一窗口的方式。不过,总有一些特别的情况下我们需要用到不止一个窗口,那么 UWP 中如何使用多窗口呢?本文内容为什么 UWP 需要多窗口?UWP 视图的概念UWP 多窗口管理多个 UWP 视图为什么 UWP 需要多窗口?多窗口在传统 Win32 的开发当中是司空见惯的事儿了,不过我个人非常不喜欢,因为 Windows 系统上的多...
原创
605阅读
0评论
1点赞
发布博客于 1 年前

语法高亮不够漂亮?这里有你想要的 Rouge 主题

写了那么久的代码,找到了满意的代码着色风格吗?想必文本编辑器的代码着色风格你已经找到了中意的了,那么你在网上 post 上去的代码呢?Rouge 是一款基于 Ruby 的语法高亮工具,能为你的代码生成漂亮的语法高亮样式。本文将介绍如何使用它,并为大家提供它默认的语法高亮样式预览。在 Jekyll 中使用 Rouge 语法高亮插件Jekyll 中的 __config.yml 文件记录了 Je...
原创
705阅读
0评论
0点赞
发布博客于 1 年前

.NET/C# 使窗口永不激活(No Activate 永不获得焦点)

有些窗口天生就是为了辅助其它程序而使用的,典型的如“输入法窗口”。这些窗口不希望抢夺其它窗口的焦点。有 Win32 方法来解决这样的问题,WS_EX_NOACTIVATE 便是关键。具体来说,是给窗口样式中额外添加一个 WS_EX_NOACTIVATE 位。var handle = GetTheWindowHandle();int exstyle = GetWindowLong(hand...
原创
213阅读
0评论
1点赞
发布博客于 1 年前

使用 IFTTT 做 RSS 的邮件订阅服务

IFTTT 是一个奇特的网络服务。它本身没有提供什么功能,但因为它的工作方式类似编程,所以你可以拿它做各种各样难以想象的事情。本文将使用 IFTTT 做一个 RSS 的邮件订阅服务。本文内容IFTTT做一个 RSS 邮件订阅服务IFTTTIFTTT 这种神奇的名字还是需要介绍一下的 —— 读作 [ɪft],意思是 If This Then That。直接翻译,是“如果这个,那就那个”。...
原创
1327阅读
0评论
0点赞
发布博客于 1 年前

程序员与英语:即时聊天中的英语缩写 lol / lmao / idk

经常混迹各大英文开发者社区的你,是否会遇到一些奇怪的英文缩写呢?本文整理一些即时聊天中常用的缩写。英语部分lolLaughing out LoudLaugh out LoudLots of LaughsLaugh Online缩写可以说来源于上面那些,似乎意思是“好好笑啊”。然而事实可能并不是这样……不知是否用“呵呵”,“Interesting” 来回复对方的句子呢?嗯嗯,差...
原创
446阅读
0评论
0点赞
发布博客于 1 年前

使用 PInvoke.net Visual Studio Extension 辅助编写 Win32 函数签名

在 .NET 程序中使用 Win32 函数并不如 C++ 中方便。因为 C# 中不能引入 C++ 中常用的头文件,于是各种方法签名、结构体定义等等都需要各种寻找。然而 PInvoke.net 帮助我们解决了这个问题。本文推荐一款 Visual Studio 插件来帮助我们更快速地插入 Win32 函数签名。本文内容PInvoke.net使用 PInvoke.net 扩展PInvoke.net...
原创
234阅读
1评论
0点赞
发布博客于 1 年前

Windows 10 应用创建模糊背景窗口的三种方法

现代的操作系统中创建一张图片的高斯模糊效果非常容易,不过如果要在窗口中获得模糊支持就需要操作系统的原生支持了。iOS/Mac 和 Windows 系统都对此有支持。本文将介绍三种创建模糊背景窗口的方法。有人可能喜欢称之为毛玻璃窗口、亚克力窗口。This post is written in multiple languages. Please select yours:{% include...
原创
488阅读
0评论
0点赞
发布博客于 1 年前

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

我的电脑上每天会跑一大堆控制台程序,于是管理这些程序的运行就成了一个问题。或者说你可能也在考虑启动一个控制台程序来完成某些特定的任务。如果我们需要结束掉这个控制台程序怎么做呢?直接杀进程吗?这样很容易出问题。我正在使用的一个控制台程序会写文件,如果直接杀进程可能导致数据没能写入到文件。所以本文介绍如何使用 .NET/C# 代码向控制台程序发送 Ctrl+C 来安全地结束掉程序。本文内容用 C...
原创
1003阅读
0评论
0点赞
发布博客于 1 年前

.NET Standard 的管理策略

.NET Standard 作为各大 .NET 的标准,我们有必要了解一下它是如何在各种 .NET 的实现之间履行自己的职责的。所以,本文会说说它的管理策略。本文内容都有哪些 .NET Standard 的实现?标准在前还是实现在前?标准之内还是使用标准?并不一定都能实现的标准都有哪些 .NET Standard 的实现?目前 .NET Standard 的实现有这些:.NET Cor...
原创
259阅读
0评论
0点赞
发布博客于 1 年前

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

在 .NET Core 2.1 发布之时,微软称之为一个 LTS 版本,那么 LTS 的版本是一种怎样的版本呢?本文内容LTSLTSC / LTSBESRLTS这是 .NET Core 2.1 的发布博客:Announcing .NET Core 2.1 - .NET Blog;文中说:.NET Core 2.1 will be a long-term support (LTS) re...
原创
1050阅读
0评论
0点赞
发布博客于 1 年前

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

项目文件中有一些属性几乎是专门为 IDE 而准备的,不过考虑到 .NET 生态的开发者多数都使用 Visual Studio,所以基本上也只有 Visual Studio 对这些特性支持的最全面。(才不会透漏这些属性其实本就是为 Visual Studio 而准备的呢。)本文将介绍如何在 Visual Studio 的解决方案资源管理器中隐藏一些文件。本文内容原生支持原生不支持变通解决活学活...
原创
1588阅读
0评论
0点赞
发布博客于 1 年前

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

在 csproj 中,Project 中的 Sdk 属性是 MSBuild 15.0 开始支持的,也就是 Visual Studio 2017 开始支持。有了 Sdk 属性的存在,MSBuild 编译过程能够扩展得非常强大,而不止是过去 Import 的一个 props 和 targets 文件。本文将介绍 Microsoft.NET.Sdk 的源码,以及利用源码中的一些线索来完成官方文档中没有...
原创
545阅读
0评论
1点赞
发布博客于 1 年前

阻止某个 NuGet 包意外升级

出于兼容性考虑,我们可能不再更新某个项目的 NuGet 包。典型的情况是软件版本进行了大规模的不兼容的升级,需要对旧格式的数据进行读取,以便迁移到新格式的数据。然而,团队开发的软件可能因为某个小伙伴不知道这样的历史问题,从而手抖将某个不应该更新的 NuGet 包更新了,于是迁移就挂了。本文提供了一种方法来避免某些特定 NuGet 包的升级。如果你只关心结果,请直接前往最后一节:终极解决方案...
原创
162阅读
0评论
0点赞
发布博客于 1 年前

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

原生 git 对于公共组件那种类型的子仓库的支持并不怎么好,就是那种某个子文件夹是一个另外的 git 仓库,并被多个 git 父仓库使用的形式。实际使用的感受甚至是“糟糕透了”。这种并不友好的子仓库支持可能与 git 的设计理念有关,不过,git 的开发者始终在打补丁以稍微优化这样的体验。本文内容不断增加的推送时间永远也解不完的冲突原因解决不断增加的推送时间如果你曾经在大仓库试过 git...
原创
363阅读
1评论
0点赞
发布博客于 1 年前

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

由 .NET Framework 3.5 引入,并依然在 .NET Core 中发扬光大的 LINQ to XML 让编写 XML 文件变得非常轻松。使用 XElement、XAttribute 我们能够完整构造一个 XML 出来。为了能直观地体会到优势,我写一个最简单的例子:var root = new XElement("Root", new XAttribute("Attrib...
原创
125阅读
0评论
0点赞
发布博客于 1 年前

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

NuGet 原本就提供了生成源码包的功能。不过,NuGet 原生的源码包仅用于调试时自带调试信息和调试源码。本文将以最简单的方式制作一个源码引用包。安装 NuGet 包后,不会生成任何程序集引用,而是相当于将源码直接放入被安装的程序集中一样。本文内容准备工作将源码加入 NuGet 包安装 NuGet 包时引入源码准备工作我们需要一个可以用来打 NuGet 包的 .NET Core 项目,...
原创
193阅读
0评论
0点赞
发布博客于 1 年前

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

我曾经写过一篇文章 如何创建一个基于命令行工具的跨平台的 NuGet 工具包,通过编写一个控制台程序来参与编译过程。但是,相比于 基于 Task 的方式,可控制的因素还是太少了。有没有什么办法能够让控制台程序也能与 MSBuild Target 之间发生更多的信息交换呢?比如报告编译错误和编译警告?答案是有的,通过格式化控制台输出。本文内容编译错误和编译警告更复杂的错误和警告控制阻止编译错误...
原创
132阅读
0评论
0点赞
发布博客于 1 年前