取消

C#/.NET 读取或修改文件的创建时间和修改时间

手工在博客中添加 Front Matter 文件头可是个相当费事儿的做法,这种事情就应该自动完成。 .NET 中提供了非常方便的修改文件创建时间的方法,使用这种方法,能够帮助自动完成一部分文件头的编写或者更新。 相关类型 .NET 中提供了两个不同的设置创建和修改时间的入口: File 静态类 FileInfo 类 ▲ File 静态类的方法 ▲ File...

Good Framework Rely on Good Api —— Six API Design Principles

We have S.O.L.I.D principles of object-oriented programming, and we also have Software design patterns to solve general, reusable solution to a commonly occurring problem. But we don’t have public-...

WPF/UWP 的 Grid 布局竟然有 Bug,还不止一个!了解 Grid 中那些未定义的布局规则

只要你用 XAML 写代码,我敢打赌你一定用各种方式使(nuè)用(dài)过 Grid。不知你有没有在此过程中看到过 Grid 那些匪夷所思的布局结果呢? 本文将带你来看看 Grid 布局中的 Bug。 This post is written in multiple languages. Please select yours: ...

The undefined behaviors of WPF Grid (the so-called bugs)

As long as you write code in XAML, I bet you must have used Grid in various ways. I wonder if you have seen any strange layout results of Grid. I’ll talk about the undefined behaviors of Grid layo...

Introducing MSTestEnhancer to make unit test result easy to read

Don’t you think that naming is very very hard? Especially naming for unit test method? Read this article for more data of naming: Don’t go into programming if you don’t have a good thesaurus - ITwo...

不再为命名而苦恼!使用 MSTestEnhancer 单元测试扩展,写契约就够了

有没有觉得命名太难?有没有觉得单元测试的命名更难?没错,你不是一个人!看看这个你就知道了:程序员最头疼的事:命名 或它的英文原文 Don’t go into programming if you don’t have a good thesaurus - ITworld。 立刻前往 nuget.org 下载安装 MSTestEnhancer 即可解决命名的苦恼。 ...

使 WPF 支持触摸板的横向滚动

微软终于开始学苹果一样好好做触摸板了(就是键盘空格键下面那一大块)。然而鉴于以前没有好好做,以至于 WPF 程序甚至都没有对触摸板的横向滚动提供支持(竖向滚动是直接使用了 MouseWheel,汗……)。但有些功能真希望能够支持横向滚动! 本文将介绍让触摸板支持横向滚动的方法,本质上也是用 MouseWheel,但却支持了横向。 ...

Support Horizontal Scrolling of TouchPad in WPF Application

Finally, Microsoft started to support touchpad like Apple did years ago. As Microsoft never do well in touchpad, WPF application even doesn’t support horizontal scrolling of touchpad. Also, WPF use...

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

我经常在博客中插入大图,然而总需要借助浏览器的滚轮缩放功能放大观看实在是不方便。于是我希望做一个点击即放大的功能。 下面就是一张可点击放大的图片,你可以点击试试!当然,我期望的效果是自动对所有博客中的图片生效。 ▲ Fluent Design App Header 创建一个用于放图片的 HTML 节点 如果你是普通的 HTML 网页,可以将下面的片段放入到你的页面中。 &...

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

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

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

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

为博客添加可切换的暗色和亮色主题

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

转义,解决花括号在 Jekyll 被识别成 Liquid 代码的问题

在 DependencyProperty.UnsetValue 的正确打开方式 和 合并 Jekyll 多种类型的页面 这两篇博客中,我都遇到了代码中的花括号被 Jekyll 识别为 Liquid 代码的问题。 然而 Liquid 的问题还需 Liquid 来解。 而 Liquid 的 raw 就是用来解决这个问题的。 {% raw %} {% comment %} 这里是各种包含...

合并 Jekyll 多种类型的页面

以前胡思乱想时,有时会讲给小伙伴们听,有时会将想法在微信上发给自己,但多数时候是没有后文的,让胡思乱想烂在脑中。还好多数时候我记得,就像我亲自记得 3 岁时候的一些故事一样。 但今天大脑被一些凌乱的事情撑爆了,心情极度低落。正好近期学着写博客,于是想把一些胡思乱想的事情写在自己的站点上。 阅读本文,将学到如何用 Jekyll 做多种类型的页面,并在首页的列表中将这些不同种类的页面合并按日...

让 GitHub Pages 强制使用 HTTPS(含码云的 gitee/oschina.io)

一天晚上在手机上浏览自己的博客时,发现居然充斥着各种恶心的广告!顿时内心犹如一万只神兽呼啸而过,不过又能怪谁呢?! 为避免引起读者不适,不贴图,只放链接,感兴趣自己点开看:图 2、图 1。 本文的重点其实是括号里的码云(gitee.io)。 GitHub Pages 去自己的 GitHub Pages 仓库页找了找设置项(https://github.com/walterlv/w...

如何搭建一个基于 GitHub Pages 的 Jekyll 静态博客(目录)

GitHub Pages 为个人、组织和项目提供了展示一些页面的方式,GitHub 帮助页的 User, Organization, and Project Pages 页面就有说明。这里,我们使用 GitHub Pages 来搭建自己的博客,正好也是里面说的给 User 用作展示的页面的用途。当然,GitHub 甚至直接在官方页面中告诉大家,你可以用来当作你的博客使用,就是这句 Creat...

[译] 搭建一个托管在 GitHub Pages 的 Jekyll 博客,并添加 Disqus 评论功能

本文翻译自 Setup up a jekyll blog using github pages and disqus comments,原作者 Vincent Daubry。 想不想马上就开始搭建个人博客,简单易学,还好看?这篇文章将教你用 Jekyll 搭建博客,配上一款养眼的主题,然后跑在 GitHub Pages 上。 为什么选用静态的站点生成器? 相比于使用类似 WordP...

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

快捷方式是一种特殊的文件,扩展名为 lnk。有很多种方式来创建快捷方式,不过使用 C# 代码创建一个却并不那么容易。 本文分享三种不同的方式创建快捷方式。 随处可用的代码 这是最方便的方式了,因为这段代码随便放到一段代码中就能运行: /// <summary> /// 为当前正在运行的程序创建一个快捷方式。 /// </summary> /// <p...

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

据说程序员最讨厌的两件事是 “别人没有写文档” 和 “要我写文档”。 编写更新日志可是也落入此怪圈呢! 程序员不写文档 来自 GitHub 的开源调查问卷结果直接显示,最令人头痛的莫过于文档了: Incomplete or outdated documentation is a pervasive problem, observed by 93% of responde...

在 GitHub 公开仓库中隐藏自己的私人邮箱地址

GitHub 重点在开方源代码,其本身还是非常注重隐私的。这一点与面向企业的 GitLab 很不一样。 不过,你依然可能在 GitHub 上泄露隐私信息,例如企业内部所用的电子邮箱。 GitHub 对个人隐私的尊重 git 的设定,开发者需要设置自己的邮箱: ▲ git 的邮箱设置(即便是公开的邮箱,我也不在博客里贴出来) 而在 GitLab 上,我们可以很直接地在提交上面看...

WPF 应用完全模拟 UWP 的标题栏按钮

WPF 自定义窗口样式有多种方式,不过基本核心实现都是在修改 Win32 窗口样式。然而,Windows 上的应用就应该有 Windows 应用的样子嘛,在保证自定义的同时也能与其他窗口样式保持一致当然能最大程度保证 Windows 操作系统上的体验一致性。 本文将分享一个我自制的标题栏按钮样式,使其与 UWP 原生应用一模一样(同时支持自定义)。 在 WPF 使用 WindowCh...

.NET 三个字母究竟应该如何大小写?前面的 “.” 什么时候能够去掉?(.NET Standard / dotnet-core / net472)

本文将解释在 .NET 技术栈中各种不同使用方式下 N E T 三个字母何时大写何时小写;前面的 “.” 什么时候加上,什么时候去掉,什么时候又使用 “dot”。 .NET 在技术文档中 如果你阅读过 https://docs.microsoft.com/zh-cn/dotnet/ 中的多数 .NET 技术文档,你应该几乎已经注意到了,在所有对大小写敏感的地方,NET 三个字母都...

每次都要重新编译?太慢!让跨平台的 MSBuild/dotnet build 的 Target 支持差量编译

如果你干预到了项目的编译过程,可能就需要考虑到差量编译了。不然——当你的项目大起来的时候,就会感受到每次都重新编译时,每次重复调试的过程都要进行漫长等待时的绝望和无奈。 如果你正遭遇差量编译失效,每次都要重新编译的问题,那么阅读本文应该能够帮助你解决问题。 msbuild.exe 和 dotnet build 编译项目的方式是一样的,只不过前者使用完整的 .NET Framework...

像黑客一样!Chrome 完全键盘操作指南(原生快捷键 + Vimium 插件)

有那么一波小伙伴,多数时候都不需要用到鼠标,通常他们正好是“黑客”。当你开始使用键盘操作一切时,便能体会到无需用鼠标瞄准按钮时的干脆,无需在键盘和鼠标之间移动手时的轻松。 Chrome 原生自带大量快捷键,Vimium 在原生的基础上又增加了大量网页操作。结合两者,你完全能摆脱鼠标。 Chrome 原生快捷键 Chrome 原生快捷键估计多数人都能说出其中的一部分出来,例如 F...

.NET/C# 使用 Span 为字符串处理提升性能

.NET Core 2.1 和 C# 7.2 带来了 Span 的原生支持,原本需要使用不安全代码操作的内存块现在可以使用安全的方式来完成。此前在性能和稳定性上需要有所取舍,而现在可以兼得了。 简单的例子 先来看一个字符串处理时使用 Span<T> 的最简单的例子: using System; using System.Text; namespace Walter...

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

在 .NET 程序中使用 Win32 函数并不如 C++ 中方便。因为 C# 中不能引入 C++ 中常用的头文件,于是各种方法签名、结构体定义等等都需要各种寻找。然而 PInvoke.net 帮助我们解决了这个问题。本文推荐一款 Visual Studio 插件来帮助我们更快速地插入 Win32 函数签名。 PInvoke.net PInvoke.net 的官方网站是 https...

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

IFTTT 是一个奇特的网络服务。它本身没有提供什么功能,但因为它的工作方式类似编程,所以你可以拿它做各种各样难以想象的事情。 本文将使用 IFTTT 做一个 RSS 的邮件订阅服务。 IFTTT IFTTT 这种神奇的名字还是需要介绍一下的 —— 读作 [ɪft],意思是 If This Then That。 直接翻译,是“如果这个,那就那个”。这其实挺有趣的,因为这就像编...

理解 Roslyn 中的红绿树(Red-Green Trees)

Roslyn 的 API 是非常易用的。即便如此复杂的 C# 语法,建立的复杂的 C# 语法树,还有其复杂的树遍历和修改过程,也都被其 API 包装得干净简洁。 而这背后是它的重要设计思路 —— 红绿树。 红绿树的影子 如果你是通过搜索找到这篇文章的,那么至少证明你调试过 Roslyn API 的使用,或者阅读过 Roslyn 的源码。因为正常使用 Roslyn 的 API 时...

Roslyn 语法树中的各种语法节点及每个节点的含义

使用 Roslyn 进行源码分析时,我们会对很多不同种类的语法节点进行分析。如果能够一次性了解到各种不同种类的语法节点,并明白其含义和结构,那么在源码分析的过程中将会更加得心应手。 本文将介绍 Roslyn 中各种不同的语法节点、每个节点的含义,以及这些节点之间的关系和语法树结构。 基本概念 using System; namespace Walterlv.Demo { ...

.NET Standard 的管理策略

.NET Standard 作为各大 .NET 的标准,我们有必要了解一下它是如何在各种 .NET 的实现之间履行自己的职责的。所以,本文会说说它的管理策略。 都有哪些 .NET Standard 的实现? 目前 .NET Standard 的实现有这些: .NET Core .NET Framework Mono Unity Xamarin 标准在前...