walterlv

吕毅 - Windows 10 Developer

吕毅 - walterlv


将 WPF、UWP 以及其他各种类型的旧样式的 csproj 文件迁移成新样式的 csproj 文件

吕毅 更新于 2018-01-16 10:53,发布于 2018-01-16 00:04

写过 .NET Standard 类库或者 .NET Core 程序的你一定非常喜欢微软为他们新开发的项目文件(对于 C#,则是 csproj 文件)。这种文件非常简洁,组织一个庞大的项目也只需要聊聊二三十行;也非常易读,你可以轻易地修改其代码而不用经过过多的提前学习。当然,微软曾经尝试过用 project.json 来组织项目文件,不过只有短短的预览版阶段用过,此后就废弃了。

然而组织传统 .NET Framework 类库的 csproj 文件却极其庞大且难以理解。而本文将提供一种迁移方法,帮助你完成这样的迁移,以便体验新 csproj 文件带来的诸多好处。

有些异常堆栈中真没我们写的源码

吕毅 更新于 2018-01-16 09:57,发布于 2017-01-19 14:54

有时候会发生一些异常,但异常的堆栈信息中完全找不到我们自己写的源码,这样的异常到底怎么调试!

为 Visual Studio 使用通配符批量添加项目文件

吕毅 更新于 2018-01-15 23:52,发布于 2017-09-26 21:12

通常大家都不会关心 Visual Studio 的项目文件里是如何记录这个项目所包含的所有文件的,因为各位开发者们早已经习惯于右键添加文件或者拖拽文件进项目了。但如果你在某一个文件夹中放了大量的文件(尤其是图片等资源文件),那么这时会卡很久才能拖进去,拖完之后如果还要批量修改生成操作,那真的是痛不欲生。

但是,Visual Studio 提供的项目文件(*.csproj)其实是支持通配符的。

.NET 中的轻量级线程安全

吕毅 发布于 2018-01-14 20:46

对线程安全有要求的代码中,通常会使用锁(lock)。自 .NET 诞生以来就有锁,然而从 .NET Framework 4.0 开始,又诞生了 6 个轻量级的线程安全方案:SpinLock, SpinWait, CountdownEvent, SemaphoreSlim, ManualResetEventSlim, Barrier

卡诺模型(KANO Model)

吕毅 发布于 2018-01-09 17:57

卡诺模型是一种研究影响顾客满意度因素的方法,在软件工程中可以用来辅助做需求分析和优化产品的质量。

.NET/C# 建议的异常处理原则

吕毅 更新于 2018-01-09 17:57,发布于 2017-12-03 16:20

“体验”一词早已泛滥却又能够粗略地表达开发团队对客户端产品的要求,“质量”在 卡诺模型(KANO Model) 中是“必备特性”——做得好了用户感觉不到,做得差一点儿用户就会破口大骂

本文将以提升客户端 GUI 产品质量为目标,谈谈 .NET/C# 中建议的异常处理方式。

C#/.NET 匿名函数会捕获变量,并延长对象的生命周期

吕毅 发布于 2018-01-05 09:26

小伙伴在一次垃圾回收中,发现对象并没有被回收掉,而注释掉一句代码后它便能够回收。

这究竟是为什么?

C#/.NET 中的契约

吕毅 更新于 2018-01-04 14:25,发布于 2017-12-20 23:04

将文档放到代码里面,文档才会及时地更新!

微软从 .NET Framework 4.0 开始,增加了 System.Diagnostics.Contracts 命名空间,用来把契约文档融入代码。然而后面一直不冷不热,Visual Studio 都没天然支持。ReSharper 不知何时加入了 ReSharper Annotations,在 ReSharper 插件工作的情况下能够进行静态契约的验证。C#8.0 的可空引用类型是 Roslyn 对 null 的验证,本以为会带来编译级别的警告,没想到也只是契约。

为什么委托的减法(- 或 -=)可能出现非预期的结果?(Delegate Subtraction Has Unpredictable Result)

吕毅 发布于 2017-12-28 10:03

当我们为一个委托写 -= 的时候,ReSharper 会提示“Delegate Subtraction Has Unpredictable Result”,即“委托的减法可能出现非预期的结果”。然而在写为事件写 -= 的时候却并没有这样的提示。然而这个提示是什么意思呢?为什么会“非预期”?为什么委托会提示而事件不会提示?

阅读本文将了解委托的减法。

将美化进行到底,把 PowerShell 做成 oh-my-zsh 的样子

吕毅 发布于 2017-12-26 15:00

不知你有没有看过 Linux 上 oh-my-zsh 的样子?看过之后你一定会惊叹,原来命令行还能这么玩!然而 Windows 下能这么玩吗?答案是可行的,接下来就来看看怎么玩。

借用了下 oh-my-zsh 的官网图片

使 32 位程序使用大于 2GB 的内存

吕毅 更新于 2017-12-26 09:05,发布于 2017-09-12 21:48

不管在 32 位 Windows 上还是在 64 位 Windows 上,32 位的应用程序都只能使用最大 2GB 的内存,这是我们司空见惯的一个设定。但其实 Windows 提供了一些方法让我们打破这样的设定,使程序使用大于 2GB 的内存。

实现一个 WPF 版本的 ConnectedAnimation

吕毅 发布于 2017-12-25 19:44

Windows 10 的创造者更新为开发者们带来了 Connected Animation 连接动画,这也是 Fluent Design System 的一部分。它的视觉引导性很强,用户能够在它的帮助下迅速定位操作的对象。

不过,这是 UWP,而且还是 Windows 10 Creator’s Update 中才带来的特性,WPF 当然没有。于是,我自己写了一个“简易版本”。

WPF 程序无法触摸操作

吕毅 更新于 2017-12-20 23:10,发布于 2017-09-12 07:34

WPF 自诞生以来就带着微软先生的傲慢。微软说 WPF 支持触摸,于是 WPF 就真的支持触摸了。对,我说的是“支持触摸”,那种摸上去能点能动的;偶尔还能带点儿多指的炫酷效果。但是,WPF 推出那会儿,绝大部分开发者都还没有触摸屏呢,开发个程序要怎么验证支不支持触摸呢?微软先生无奈地决定——你写鼠标的代码就好了,我帮你转换!于是……一大波 BUG 袭来……

让 ScrollViewer 的滚动带上动画

吕毅 发布于 2017-12-19 20:19

WPF 的 ScrollViewer 没有水平滚动和垂直滚动的属性 HorizontalScrollOffset VerticalScrollOffset,只有水平滚动和垂直滚动的方法 ScrollToHorizontalOffset ScrollToVerticalOffset,那么怎么给滚动过程加上动画呢?

迫不及待地体验了一把 C#8.0 中的可空引用类型(Nullable Reference)

吕毅 更新于 2017-12-19 08:36,发布于 2017-12-18 21:41

在我之前的一篇博客 NullReferenceException,就不应该存在! 中,我吐槽了 C# 中 null 的弊端以及避免 null 的方法;事实上这本都是现代高级语言中极力推崇的做法。Kotlin 和 Swift 自诞生之日起引用类型就不能为空,C# 背着历史的包袱直到 8.0 才开始这么做……