随笔分类 -  .NET Core

.NET Core
摘要:我在 使用 Task.Wait()?立刻死锁(deadlock) 一文中站在类库使用者的角度看 async/await 代码的死锁问题;而本文将站在类库设计者的角度来看死锁问题。 阅读本文,我们将知道如何编写类库代码,来尽可能避免类库使用者出现那篇博客中描述的死锁问题。 可能死锁的代码 现在,我们是 阅读全文
posted @ 2018-03-23 22:01 walterlv 阅读(544) 评论(0) 推荐(0) 编辑
摘要:多人协作开发的项目总会遇到代码编写风格上的差异。一般工具都能帮我们将常见的差异统一起来——例如 if 的换行;但也有一些不那么通用,但项目中却经常会出现的写法也需要统一。 例如将单元测试中的 Assert.AreEqual(foo.GetType(), typeof(Foo)); 换成 Assert 阅读全文
posted @ 2018-03-20 20:35 walterlv 阅读(387) 评论(0) 推荐(0) 编辑
摘要:使用 Visual Studio 提供的 Syntax Visualizer,我们可以实时看到一个代码文件中的语法树。这对我们基于 Roslyn 编写静态分析和修改工具非常有帮助。本文将介绍如何安装它和使用它。 这里是 Visual Studio 的语法可视化(Syntax Visualizer): 阅读全文
posted @ 2018-03-19 19:51 walterlv 阅读(401) 评论(0) 推荐(0) 编辑
摘要:Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性。以至于我们只需要编写很少量的代码便能够分析我们的项目文件。 作为 Roslyn 入门篇文章,你将可以通过本文学习如何开始编写一个 Roslyn 扩展项目,如何开始分析一个解决方案(.sln)中项目(.csproj)的代码文件(.cs 阅读全文
posted @ 2018-03-19 19:49 walterlv 阅读(654) 评论(1) 推荐(1) 编辑
摘要:在 async/await 异步模型(即 TAP Task-based Asynchronous Pattern)出现以前,有大量的同步代码存在于代码库中,以至于这些代码全部迁移到 async/await 可能有些困难。这里就免不了将一部分异步代码修改为同步代码。然而传统的迁移方式存在或多或少的问题 阅读全文
posted @ 2018-03-19 19:47 walterlv 阅读(326) 评论(2) 推荐(0) 编辑
摘要:有没有觉得命名太难?有没有觉得单元测试的命名更难?没错,你不是一个人!看看这个你就知道了:程序员最头疼的事:命名 或它的英文原文 Don’t go into programming if you don’t have a good thesaurus - ITworld。 立刻前往 nuget.or 阅读全文
posted @ 2018-02-27 20:12 walterlv 阅读(262) 评论(0) 推荐(0) 编辑
摘要:都知道反射伤性能,但不得不反射的时候又怎么办呢?当真的被问题逼迫的时候还是能找到解决办法的。 为反射得到的方法创建一个委托,此后调用此委托将能够提高近乎直接调用方法本身的性能。(当然 Emit 也能够帮助我们显著提升性能,不过直接得到可以调用的委托不是更加方便吗?) 性能对比数据 ▲ 没有什么能够比 阅读全文
posted @ 2018-02-27 20:00 walterlv 阅读(542) 评论(3) 推荐(0) 编辑
摘要:我在 .NET/C# 建议的异常处理原则 中描述了如何 catch 异常以及重新 throw。然而何时应该 throw 异常,以及应该 throw 什么异常呢? 究竟是谁错了? 代码中从上到下从里到外都是在执行一个个的包含某种目的的代码,我们将其称之为“任务”。当需要完成某项任务时,任务的完成情况只 阅读全文
posted @ 2018-02-27 19:51 walterlv 阅读(1197) 评论(3) 推荐(1) 编辑
摘要:当你想写一个泛型 的类型的时候,是否想过两个泛型参数、三个泛型参数、四个泛型参数或更多泛型参数的版本如何编写呢?是一个个编写?类小还好,类大了就杯具! 事实上,在 Visual Studio 中生成代码的手段很多,本文采用最笨的方式生成,但效果也很明显——代码写得轻松写得爽! 我们想要的效果 我们现 阅读全文
posted @ 2018-01-31 13:37 walterlv 阅读(280) 评论(0) 推荐(0) 编辑
摘要:Windows 10 创意者更新之后,默认开启了重启后恢复应用程序状态的功能。这是自 Vista 以来就提供的功能——Restart Manager。 应用程序实现这一功能只需要调用 RegisterApplicationRestart 即可。传入两个参数: 我封装了以下这个函数的调用并将其放到 G 阅读全文
posted @ 2018-01-30 08:46 walterlv 阅读(865) 评论(0) 推荐(1) 编辑
摘要:可移植类库、共享项目、.NET Standard 项目都能够帮我们完成跨多个 .NET SDK 的单一项目开发,但它们的跨 SDK 开发都有些限制。现在,我们又有新的方式能够跨多个 .NET SDK 开发了,这就是使用新的 csproj 文件格式。 看看拥有多个开发框架的项目长什么样吧! ▲ 多 S 阅读全文
posted @ 2018-01-30 08:45 walterlv 阅读(597) 评论(3) 推荐(2) 编辑
摘要:当一只断点打在 Visual Studio 的代码编辑器中,程序命中断点的那一刻,调试才刚刚开始……这个时候忙碌的手在键盘和鼠标之间来回跳跃,试图抓住每一次单步执行带来的状态改变。 如果命中断点的那一刻多数我需要的状态都自动呈现,偶尔需要的状态能够快速定位,那该多好!于是,有了 OzCode…… — 阅读全文
posted @ 2018-01-30 08:44 walterlv 阅读(749) 评论(0) 推荐(0) 编辑
摘要:MEF,Managed Extensibility Framework,现在已经发布了三个版本了,它们是 MEF 和 MEF2。 等等!3 去哪儿了?本文将教大家完成基于 MEF2 的开发。 MEF 和 MEF2 其实微软发布了四个版本的 MEF: 随着 .NET Framework 4.0 发布, 阅读全文
posted @ 2018-01-30 08:40 walterlv 阅读(1057) 评论(1) 推荐(1) 编辑
摘要:写过 .NET Standard 类库或者 .NET Core 程序的你一定非常喜欢微软为他们新开发的项目文件(对于 C#,则是 csproj 文件)。这种文件非常简洁,组织一个庞大的项目也只需要聊聊二三十行;也非常易读,你可以轻易地修改其代码而不用经过过多的提前学习。当然,微软曾经尝试过用 pro 阅读全文
posted @ 2018-01-30 08:38 walterlv 阅读(330) 评论(0) 推荐(0) 编辑
摘要:小伙伴在一次垃圾回收中,发现对象并没有被回收掉,而注释掉一句代码后它便能够回收。 这究竟是为什么? 不关心探索过程的就直接拉到最后看结论吧! 探索 测试代码是这样的: 需要验证的是 MainPage 对象是否被回收。然而在这段代码中,MainPage 并没有被回收;然而去掉最后一行,MainPage 阅读全文
posted @ 2018-01-30 08:31 walterlv 阅读(499) 评论(0) 推荐(0) 编辑
摘要:在我之前的一篇博客 NullReferenceException,就不应该存在! 中,我吐槽了 C# 中 null 的弊端以及避免 null 的方法;事实上这本都是现代高级语言中极力推崇的做法。Kotlin 和 Swift 自诞生之日起引用类型就不能为空,C# 背着历史的包袱直到 8.0 才开始这么 阅读全文
posted @ 2017-12-30 14:46 walterlv 阅读(525) 评论(0) 推荐(0) 编辑
摘要:一个按钮,点击执行一个任务。我们可能直接在它的 Click 事件中写下了执行任务的代码。 一般我们无需担心这样的代码会出现什么问题——但是,这样的好事情只对同步任务有效;一旦进入了异步世界,这便是无尽的 BUG! 重新进入(Reentrancy) ▲ 以上,在按钮点击事件中执行同步任务 上面的代码, 阅读全文
posted @ 2017-12-30 14:30 walterlv 阅读(258) 评论(0) 推荐(0) 编辑
摘要:将文档放到代码里面,文档才会及时地更新! 微软从 .NET Framework 4.0 开始,增加了 System.Diagnostics.Contracts 命名空间,用来把契约文档融入代码。然而后面一直不冷不热,Visual Studio 都没天然支持。ReSharper 不知何时加入了 ReS 阅读全文
posted @ 2017-12-30 14:21 walterlv 阅读(716) 评论(0) 推荐(0) 编辑
摘要:当我们为一个委托写 -= 的时候,ReSharper 会提示“Delegate Subtraction Has Unpredictable Result”,即“委托的减法可能出现非预期的结果”。然而在写为事件写 -= 的时候却并没有这样的提示。然而这个提示是什么意思呢?为什么会“非预期”?为什么委托 阅读全文
posted @ 2017-12-30 10:56 walterlv 阅读(317) 评论(0) 推荐(0) 编辑
摘要:这篇文章不会说 MVVM 是什么,因为讲这个的文章太多了;也不会说 MVVM 的好处,因为这样的文章也是一搜一大把。我只是想说说我们究竟应该如何理解 M-V-VM,当我们真正开始写代码时,应该在里面的每一层里写些什么。 MVVM,当然三层——M-V-VM。就凭这个“三层”结构,WPF/UWP 开发者 阅读全文
posted @ 2017-11-30 01:33 walterlv 阅读(1046) 评论(0) 推荐(0) 编辑