lindexi

林德熙 - 微软最具价值专家和 .NET 基金会成员

林德熙

dotnet 读 WPF 源代码笔记 提升调试效率的 NamedObject 类型

本文来聊聊 WPF 那些值得称赞的设计中的 NamedObject 类型。在 WPF 中,有很多值得我学习的设计开发思想,其中就包括本文将要介绍的 NamedObject 类型。此类型的定义仅仅只是为了方便调试,而没有具体的业务功能

WinDbg 加载 dotnet core 的 sos.dll 辅助调试方法

本文告诉大家如何加载 .NET Core 或 .NET 5 的 sos.dll 文件到 WinDbg 的方法

MSIL 静态类在 IL 定义上和非静态类的差别

本文来聊聊 MSIL 的基础知识,给一个 C# 的类标记了 static 之后和标记 static 之前,生成这个类的 IL 代码有什么不同

dotnet OpenXML 形状的 Outline 的 LineWidth 线条轮廓粗细宽度的行为

本文来和大家聊聊 OpenXML 里面的给 PPT 用的形状里面的线条宽度的定义,以及在 PowerPoint 上的行为

dotnet OpenXML 读取 PPT 动画进入退出强调动画类型

本文告诉大家,如何判断 PPT 的某个元素动画属于进入或退出或强调等类型的动画

dotnet OpenXML 读取 PPT 主序列进入退出强调动画

本文告诉大家如何读取 PPT 文件里面,放在主动画序列 MainSequence 的进入和退出和强调的动画,和在 OpenXML 里面的存放方式

dotnet OpenXML 继承组合颜色的 GrpFill 属性

在 OpenXML 的颜色画刷填充,有特殊的填充是 GrpFill 属性,对应 OpenXML SDK 定义的 DocumentFormat.OpenXml.Drawing.GroupFill 类型

dotnet 使用 FormatterServices 的 GetUninitializedObject 方法在丢失 DLL 情况下能否执行

在 dotnet 里面,可以使用 FormatterServices 的 GetUninitializedObject 方法可以实现只创建对象,而不调用对象的构造函数方法。而如果在使用此方法时,存在了 DLL 缺失的情况,此时能否让此方法运行通过,创建出空的对象

dotnet core 和 .NET 5 不支持 Prefer32Bit 首选 32 位的功能

我尝试在 dotnet core 和 dotnet 5 的应用上,右击项目属性,在生成界面勾选首选 32 位的功能,然而在 x64 下没有生成 PE32+ 的应用

GitHub 的 Action 接入 Stryker.NET 进行自动化测试单元测试鲁棒性

假设有一个捣蛋的小伙伴加入了你的团队,这个捣蛋的小伙伴喜欢乱改代码,请问此时的单元测试能否拦住这些逗比行为?如果不能拦住逗比行为,是否代表着单元测试有所欠缺,或者有某些分支逻辑没有考虑到。本文将告诉大家的 Stryker.NET 就属于这样的一个捣蛋的小伙伴,这个工具将会在执行测试的时候乱改你的代码,看看你的单元测试是否能拦住这样的行为。如果在乱改代码之后,单元测试依然是通过的,那证明单元测试没有拦住此行为,说不定就需要改改单元测试了

dotnet C# 高性能配置文件读写库 dotnetCampus.Configurations 简介

在应用程序运行的时,需要根据不同的配置执行不同的内容。有很多根据配置而初始化的功能往往是在应用程序启动的时候需要执行。对于很多类型的应用程序,特别是客户端的应用程序,启动的性能特别重要。也因此,在启动过程中需要依赖配置文件的不同配置而启动不同的功能时,就对配置文件的读写和解析性能提出了很高的要求 本文来和大家简单介绍我团队开源的 dotnetCampus.Configurations 高性能配置文件读写库。这个库不仅包含了配置文件的读取解析,还包括了自定义配置文件格式,也就是 COIN 硬币格式的配置文件。提供了多线程和多进程的读写安全的功能和毫秒级的配置文件读取解析性能,以及最低支持到 .NET Framework 4.5 框架

Roslyn 通过 EmbedAllSources 将源代码嵌入到 PDB 符号文件中方便开发者调试

咱造了一个轮子,咱可以非常方便将这个轮子库作为 NuGet 发布出去,造福其他开发者,或者毒害其他开发者。为什么说是毒害呢?因为有时候这个库存在坑,此时使用这个库的开发者就受到了伤害。为了安抚脆弱的开发者们,咱可以提高一下开发者们的调试效率,例如让开发者们可以调试到库里面的源代码 本文来告诉大家如何在项目文件里面添加上 EmbedAllSources 属性,将自己的代码嵌入到 PDB 符号文件里面,让开发者们在调试的时候,可以看到库的源代码

使用 FastTunnel 做内网穿透远程计算机桌面服务器

FastTunnel是一款高性能跨平台内网穿透工具,使用它可以实现将内网服务暴露到公网供自己或任何人访问。对比市面上的其他内网穿透工具最大优势在于基于 dotnet 编写,提供二次开发扩展能力。本文将来告诉大家,在不做任何编程的情况下,通过 FastTunnel 工具,让我某台内网的 Windows 电脑,开启远程桌面服务,提供外网连入的能力

dotnet 通过 GitHub 的 Action 辅助下载国外资源文件的离线下载方法

土豪的微软收购了 GitHub 之后,对所有开发者开放了 GitHub 的 Action 平台,可以让咱免费使用微软的构建服务器进行构建代码。但 GitHub 的 Action 的功能可远不是只能用来构建代码,还可以有很多有趣的玩法。如本文将告诉大家的方法,在天朝里面,咱的网络是有限的。偶尔会遇到在外网上的一些有趣的资源,但受限于网络,咱下载会失败。不过 GitHub 的 Action 是部署在外网的,在微软家的网络超级超级好的服务器上的,因此咱就可以请 GitHub 的 Action 帮忙下载一些文件,接着通过其他方式,如邮件的形式发送回来

msbuild 使用 ProduceOnlyReferenceAssembly 创建作为引用的仅公开成员程序集

本文告诉大家如何使用 msbuild 的 ProduceOnlyReferenceAssembly 功能,将某个程序集里面仅导出其中的公开成员定义,而不包含具体的实现的方法

dotnet 使用 Refasmer 从现有的 DLL 里面导出公开的成员组装出新的仅作为引用用途的程序集

本文告诉大家 Resharper 家(JetBrains)开源的 Refasmer 工具,这个工具的功能就是从现有的 DLL 或 EXE 程序集里面,将所有的公开成员导出,重新打出新的 DLL 或 EXE 程序集。此时打出的新的程序集里面的方法都不包含实现,而是只有定义,这样的程序集被成为仅作为引用用途的程序集,也就是 Reference assemblies 的意思,这也就是 Refasmer 命名来源

C# 从零开始写 SharpDx 应用 聊聊功能等级

本文将和大家聊聊 DirectX 里面的功能等级在 SharpDx 的使用方法

UWP 写入图片 Exif 信息

本文告诉大家如何在 UWP 中,保存图片的时候,写入 Exif 信息,也就是如照片的 相机型号 制造商 光圈值等信息的写入

WPF 如何找到资源文件路径包含 # 号的文件

本文告诉大家如何在 WPF 获取资源文件包含 # 号的文件资源

WPF 框架开发 调试和开发 System.Xaml 的独立项目方法

本文将给大家一个 System.Xaml 的独立项目,此项目代码和 WPF 仓库的 System.Xaml 项目相同,但本文的 System.Xaml 的独立项目不依赖 WPF 其他项目,构建方便,构建速度快,搭配 System.Xaml.Demo 项目更方便调试

VisualStudio 在 DebuggerDisplay 的属性更改业务逻辑将会让调试和非调试下逻辑不同

本文记录我写的逗比代码,我在 DebuggerDisplay 对应的属性的 get 方法上,在这个方法里面修改了业务逻辑,如修改界面元素,此时我在 VisualStudio 断点调试下和非断点调试下的行为不相同

C# dotnet 使用 OpenXml 关闭时不自动保存文档方法

默认在使用 OpenXML SDK 读写 Office 文件,如 PPT 或 Word 或 Excel 文件时,在关闭时调用 Dispose 将会自动将更改部分写入到文件。本文告诉大家如何让 OpenXML SDK 不写入只是释放资源

dotnet C# 调用委托的 GetInvocationList 的对象分配

本文也叫跟着 Stephen Toub 大佬学性能优化系列,这是我从 Stephen Toub 大佬给 WPF 框架做性能优化学到的知识,在热路径下,也就是频繁调用的模块,如果调用了委托的 GetInvocationList 方法,那么将视委托的大小,每次创建不同大小的新数组对象,而在频繁调用的模块,将会创建大量的对象

关于技术规划的想法

这是我和总工聊了一个下午之后,我的收获。但是技术规划是每个人都有自己的想法,同时和具体的团队和时机相关,再加上我自己没有实际参与任何的规划,我只是执行技术规划的其中很小的一个点,因此本文的内容一定存在争议

WPF 列表右键菜单比较符合 MVVM 的命令绑定方法

群里小伙伴问我如何在 ListView 的右击的时候知道右击的是哪一项,他想要获取对应的行信息。他使用的是 GridView 做的,于是我告诉他需要自己写 ItemContainerStyle 在 GridViewRowPresenter 里添加右键的逻辑。但是这样写不清真,我问到了他的本质问题其实只是想要做右键菜单。刚好我在写一个测试应用,用于测试我的文件下载库,此时需要用到在右击某一个下载项的时候,拿到当前下载项的信息,给出右键菜单。我不使用小伙伴的逻辑,就按照我自己会采用的写法,我认为这样写比较符合 WPF 框架的设计,下面让我告诉大家我的用法,十分简单

WPF 框架开发 调试和开发 XAML 构建过程的 PresentationBuildTasks 方法

阅读本文,你可以了解如何编写开发和调试 XAML 构建为 Baml 和 g.cs 文件的过程和工具。本文也适合想要了解 WPF 的 XAML 构建过程的开发者阅读,本文提供了可以断点调试 WPF 的 XAML 构建过程的方法和代码

听龙华讲公共组件 CBB 建设笔记

这篇博客在我的草稿从 2017 放到现在,我做了三年的公共组件,我觉得我现在能来发布这篇笔记。本文将来和大家讲龙华大佬告诉我的公共组件 CBB 建设相关知识

dotnet C# 使用无捕获的委托可以获得编译器缓存减少对象创建

本文也叫跟着 Stephen Toub 大佬学性能优化系列,这是我从 Stephen Toub 大佬给 WPF 框架做性能优化学到的知识,通过让委托无捕获来进行性能优化

dotnet C# 使用 EqualityComparer 提升泛型值类型相等判断性能

本文也叫跟着 Stephen Toub 大佬学性能优化系列,这是我从 Stephen Toub 大佬给 WPF 框架做性能优化学到的知识,通过 EqualityComparer 静态类的相等方法来优化值类型相等判断性能

dotnet C# 多线程集合的 Linq 获取值同时写入集合将会抛出异常

在集合变更,无论是使用 foreach 遍历还是使用 Linq 语句,即使是 FirstOrDefault 获取第一项,都会失败

dotnet C# 字典 Dictionary 和 Hashtable 的性能对比

如果没有特别的需求,请使用 Dictionary 而不是 Hashtable 原因是 Dictionary 的性能更好,本文将告诉大家 Stephen Toub 大佬的评测

dotnet OpenXML 测量单位的角度和弧度值

在 OpenXML 中表示的角度和咱日常使用的角度不相同,而在 .NET 里面的 Math 函数里面使用的是弧度表示,此时就需要有一些转换。本文来告诉大家一些概念,让大家明白角度和弧度的差别

WPF 设置输入只能英文

有时输入只能让用户输入英文,那么如何设置输入只能英文? 做法就是禁用 IME 输入法,此时输入就只能是英文或数字

WPF 下拉框选项做鼠标 Hover 预览效果

本文来告诉大家如何在 WPF 中,在 下拉框 ComboBox 里面,鼠标移动到 ComboBoxItem 上时,自动触发对应的事件,用来预览此选项值。例如我在实现一个颜色下拉框,此时我可以通过点击下拉框显示多个不同的颜色,鼠标移动到某个颜色选项上,可以修改界面,预览此颜色的内容

WPF 给 Grid 的辅助方法 添加行列名称绑定

有一些设计师喜欢改改改,界面的整体布局总是变更,如给 Grid 加一列删一行等,每次这样的更改的时候,都需要小心修改 Grid 里面的元素设置的行列序号。我认为在 Grid 简单的时候,当然大多数时候都应该让 Grid 不那么复杂,那么序号的可读性不错。如果 Grid 行列数量比较多,那么此时行列的序号的可读性将会降低,本文来告诉大家一个简单的方法,可以给 Grid 的行列添加名称绑定,让元素绑定到行列可以不使用序号,而是使用名称