像黑客一样!Chrome 完全键盘操作指南(原生快捷键 + Vimium 插件) 2018-07-27 23:40 有那么一波小伙伴,多数时候都不需要用到鼠标,通常他们正好是“黑客”。当你开始使用键盘操作一切时,便能体会到无需用鼠标瞄准按钮时的干脆,无需在键盘和鼠标之间移动手时的轻松。 Chrome 原生自带大量快捷键,Vimium 在原生的基础上又增加了大量网页操作。结合两者,你完全能摆脱鼠标。
.NET/C# 使用 Span 为字符串处理提升性能 2018-07-21 16:51 .NET Core 2.1 和 C# 7.2 带来了 Span 的原生支持,原本需要使用不安全代码操作的内存块现在可以使用安全的方式来完成。此前在性能和稳定性上需要有所取舍,而现在可以兼得了。
使用 PInvoke.net Visual Studio Extension 辅助编写 Win32 函数签名 2018-07-21 14:35 在 .NET 程序中使用 Win32 函数并不如 C++ 中方便。因为 C# 中不能引入 C++ 中常用的头文件,于是各种方法签名、结构体定义等等都需要各种寻找。然而 PInvoke.net 帮助我们解决了这个问题。本文推荐一款 Visual Studio 插件来帮助我们更快速地插入 Win32 函数签名。
使用 IFTTT 做 RSS 的邮件订阅服务 2018-07-21 09:40 IFTTT 是一个奇特的网络服务。它本身没有提供什么功能,但因为它的工作方式类似编程,所以你可以拿它做各种各样难以想象的事情。 本文将使用 IFTTT 做一个 RSS 的邮件订阅服务。
理解 Roslyn 中的红绿树(Red-Green Trees) 2018-07-19 11:48 Roslyn 的 API 是非常易用的。即便如此复杂的 C# 语法,建立的复杂的 C# 语法树,还有其复杂的树遍历和修改过程,也都被其 API 包装得干净简洁。 而这背后是它的重要设计思路 —— 红绿树。
Roslyn 语法树中的各种语法节点及每个节点的含义 2018-07-18 12:24 使用 Roslyn 进行源码分析时,我们会对很多不同种类的语法节点进行分析。如果能够一次性了解到各种不同种类的语法节点,并明白其含义和结构,那么在源码分析的过程中将会更加得心应手。 本文将介绍 Roslyn 中各种不同的语法节点、每个节点的含义,以及这些节点之间的关系和语法树结构。
.NET Standard 的管理策略 2018-07-08 14:28 .NET Standard 作为各大 .NET 的标准,我们有必要了解一下它是如何在各种 .NET 的实现之间履行自己的职责的。所以,本文会说说它的管理策略。
在 Visual Studio 的解决方案资源管理器中隐藏一些文件 2018-07-04 12:30 项目文件中有一些属性几乎是专门为 IDE 而准备的,不过考虑到 .NET 生态的开发者多数都使用 Visual Studio,所以基本上也只有 Visual Studio 对这些特性支持的最全面。(才不会透漏这些属性其实本就是为 Visual Studio 而准备的呢。) 本文将介绍如何在 Visual Studio 的解决方案资源管理器中隐藏一些文件。
如何在 MSBuild Target(Exec)中报告编译错误和编译警告 2018-07-02 12:49 我曾经写过一篇文章 如何创建一个基于命令行工具的跨平台的 NuGet 工具包,通过编写一个控制台程序来参与编译过程。但是,相比于 基于 Task 的方式,可控制的因素还是太少了。 有没有什么办法能够让控制台程序也能与 MSBuild Target 之间发生更多的信息交换呢?比如报告编译错误和编译警告?答案是有的,通过格式化控制台输出。
语义耦合(Semantic Coupling) 2018-06-30 07:01 跟小伙伴一起重构一段 UI,试图将用户界面和业务代码分离的时候,小伙伴试图在业务代码中直接调用 UI。我们当然都知道这会产生耦合,于是小伙伴试图定义一些属性、变量或接口来解决这个耦合。虽然在代码的静态分析中,这一的耦合消失了,但我始终觉得不妥。觉得耦合依然存在,只是不再能被静态分析了。 我想到一个词——“语义耦合(Semantic Coupling)”,搜索发现也有很多小伙伴在关心这个问题。而且,从他们的文章和讨论中,我也了解到更多关于语义耦合的种类和危害。
XML 的 XPath 语法 2018-06-24 11:43 XPath 是 XML 路径语言(XML Path Language),用来确定XML文档中某部分位置的语言。无论是什么语言什么框架,几乎都可以使用 XPath 来高效查询 XML 文件。 本文将介绍 XPath 的一些语法。
UWP 将图片裁剪成圆形(椭圆) 2018-06-15 13:21 不知从什么时候开始,头像流行使用圆形了,于是各个平台开始追逐显示圆形裁剪图像的技术。UWP 有内建的机制支持这种圆形图像裁剪,不过,仅限于画刷。
C#/.NET 中推荐的 Dispose 模式的实现 2018-06-13 03:02 如果你觉得你的类需要实现 IDisposable 接口,还是需要注意一些坑的。不过前人准备了 Dispose 模式 供我们参考,最大程度避免这样的坑。
Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码 2018-06-02 01:26 Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性。以至于我们只需要编写很少量的代码便能够编译并执行我们的代码。 作为 Roslyn 入门篇文章之一,你将可以通过本文学习如何开始编写一个 Roslyn 扩展项目 —— 编译一个类,然后执行其中的一段代码。
Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码 2018-06-02 01:26 Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性。以至于我们只需要编写很少量的代码便能够分析我们的项目文件。 作为 Roslyn 入门篇文章,你将可以通过本文学习如何开始编写一个 Roslyn 扩展项目,如何开始分析一个解决方案(.sln)中项目(.csproj)的代码文件(.cs)。
文件被占用?系统自带的“资源监视器(resmon)”也能帮你找到占用它的真凶 2018-05-27 01:02 文件或文件夹被占用,然后无法删除?这真的很恼人。关键是还不知道究竟是哪个程序占用的,想退出都不行。 有各种工具解决此问题,平时下载屯着他们能够省下不少事儿。如果突然间情况非常紧急怎么办?学会使用本文介绍的系统自带工具“资源监视器”,也能立即着手找到真凶!
神器如 dnSpy,无需源码也能修改 .NET 程序 2018-05-22 14:02 dnSpy 是 0xd4d 开发的 .NET 程序调试神器。 说它是神器真的毫不为过!它能在完全没有源码的情况下即时调试程序,甚至还能修改程序!本文讲向大家介绍如何使用 dnSpy 修改 .NET 程序。
推荐近乎免费的调试神器——OzCode 2018-05-22 01:47 当一只断点打在 Visual Studio 的代码编辑器中,程序命中断点的那一刻,调试才刚刚开始……这个时候忙碌的手在键盘和鼠标之间来回跳跃,试图抓住每一次单步执行带来的状态改变。 如果命中断点的那一刻多数我需要的状态都自动呈现,偶尔需要的状态能够快速定位,那该多好!于是,有了 OzCode……
Grid 布局算法!自己动手实现一个 Grid 2018-05-20 07:11 Avalonia 是一款尚在开发中的基于 .NET Core 的跨平台 UI 框架。目前用在个人项目中还是不错的,不过还需要大家在开源社区中多多支持。 我为它写了一个全新的 Grid 布局算法,此算法是 WPF 在通常情况下的性能的两倍。本文将分享我在此项目中实现的算法的原理。
安利一款非常好用的命令行参数库:McMaster.Extensions.CommandLineUtils 2018-04-26 12:39 命令行参数解析想必是每一个命令行程序都难以避开的工程。这工程可小可大,但每次都写始终是在浪费时间。而且,不同人实现也千差万别,使得不同的命令行程序命令参数传入的体验总有差异。 于是安利一款命令行工具库——McMaster.Extensions.CommandLineUtils,它符合当下各大主流命令行工具的参数体验;而且,代码非常简洁。
冷算法:自动生成代码标识符(类名、方法名、变量名) 2018-04-26 00:04 竟然有小伙伴喜欢在编写代码时使用随机字符当作类名、方法名、变量名,例如这一篇博客里的代码:使用 Resharper 特性 - 林德熙。既然随机,那也随机得像一些啊!于是我改进了标识符的随机算法,使得生成的标识符更像真实单词的组合。
利用 TypeConverter,转换字符串和各种类型只需写一个函数 2018-04-22 23:31 本文代码基于 .NET Framework 实现。 本来只想进行简单的配置存储的,不料发现 .NET 的基本类型多达十多种。于是,如果写成下面这样,那代码可就太多了哦:
命令“"xxx.exe" xxx”已退出,代码为 3/123/9009。VS 的这些编译错误代码代表了什么意思? 2018-04-16 10:56 我们在 cmd 中输入常见命令的时候,如果命令输入错误或使用错误,cmd 中会提示错误原因,帮助我们定位并解决问题。然而如果相同的命令放到了 Visual Studio 的生成事件中,我们就只能得到 Visual Studio 返回的错误代码了。为了能够快速地根据错误代码大致猜测错误原因,本文整理了一部分错误代码的通用原因。
VS 编译太慢了吗?新建解决方案配置关闭一部分项目的编译 2018-04-02 23:59 手头的解决方案真大!里面的项目个数达到了 30 个或是 50 个?然而接近一半是单元测试项目和辅助工具。再加上一些不尽如人意的项目优化,编译速度真的是无力吐槽。幸好 Visual Studio 提供了解决方案配置功能,可以让我们在编译时略过一些项目。
利用 ReSharper 自定义代码中的错误模式,在代码审查之前就发现并修改错误 2018-03-20 12:35 多人协作开发的项目总会遇到代码编写风格上的差异。一般工具都能帮我们将常见的差异统一起来——例如 if 的换行;但也有一些不那么通用,但项目中却经常会出现的写法也需要统一。 例如将单元测试中的 Assert.AreEqual(foo.GetType(), typeof(Foo)); 换成 Assert.IsInstanceOfType(foo, typeof(Foo));。 阅读本文将学习如何使用 ReSharper 的 Custom Pattern 功能来完成这样的警告和转换。
WPF 程序无法触摸操作?我们一起来找原因和解决方法! 2018-03-19 11:30 WPF 自诞生以来就带着微软先生的傲慢。微软说 WPF 支持触摸,于是 WPF 就真的支持触摸了。对,我说的是“支持触摸”,那种摸上去能点能动的;偶尔还能带点儿多指的炫酷效果。但是,WPF 推出那会儿,绝大部分开发者都还没有触摸屏呢,开发个程序要怎么验证支不支持触摸呢?微软先生无奈地决定——你写鼠标的代码就好了,我帮你转换!于是……一大波 BUG 袭来……
在移动端打开 Google 的网页快照 2018-03-08 23:55 Google 的网页快照功能在原网页意外挂掉的时候能够临时为我们提供网页内的信息。例如我们要搜索的某项技术资料来源于某个个人站点,而现在他的域名到期了没有续费;例如我现在的博客在部署期间挂掉了,不能继续访问。这时 Google 网页快照都能够帮我们临时访问网页缓存。
在 HTML 超链接上添加可交互的 ToolTip 2018-03-08 10:39 当鼠标滑过超链接的那一刻,我们都能想象出一个熟悉的白色提示框从鼠标指针所在的位置淡入。那是 ToolTip 提示框。HTML 中我们能通过简单的属性设置获得 ToolTip,但如果希望 ToolTip 是能交互的,那么就阅读本文吧!
如何删除 Windows 10 系统生成的 WindowsApps 文件夹 2018-02-27 16:03 如果曾经修改过 Windows 10 应用安装路径到非系统盘,那么那个盘下就会生成一些文件夹。如果以后重装了系统或者应用删除了,挪位置了,那些文件夹依然在那里——删不掉! 大家都知道这是权限问题,然而如何修改权限以便成功删除呢?
Windows 10 自带那么多图标,去哪里找呢? 2018-02-27 15:11 无意间发现我的 D 盘根目录中大部分的文件夹都是系统专用文件夹,有自己的独特图标,偶有一两个开发用的文件夹是默认图标。于是想把它们改成独特样式,而且是 Windows 10 那些新图标样式!