lindexi

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

林德熙

WPF 使用快捷键方式制作简易的 Word 上的 Latex 输入法

本文将告诉大家如何在 WPF 里面编写一个简易输入法软件,让这个输入法软件支持插入 Latex 格式的公式到 Word 内。核心原理是使用 Word 的快捷键插入公式编辑器,再通过剪贴板输入 Latex 格式的公式内容,再输入回车作为 Word 公式

拼音输入法 快速输入带音调的字符

本文告诉大家如何使用本文提供的输入法快速输入带音调的字符

WPF 拼音输入法

本文来告诉大家如何使用 WPF 来写一个输入法,使用的方式是钩子。

dotnet C# X11 开发笔记

本文记录我学习开发 X11 应用的笔记

dotnet DirectX 做一个简单绘制折线笔迹的 D2D 应用

本文将告诉大家如何从简单的控制台开始,使用 Vortice 辅助调用 Direct2D1 的功能,配合 WM_Pointer 消息,制作一个简单绘制触摸折线笔迹的 D2D 应用

dotnet 学习 CPF 框架笔记 了解 X11 里如何获取触摸信息

本文记录我学习 CPF 框架的笔记,本文记录我阅读 CPF 框架,学习到了如何在 dotnet C# 里面获取到 X11 的触摸信息,获取到多指触摸以及触摸点的面积和触摸点压感等信息的方法

dotnet 代码调试方法

本文将会从基础到高级,从简单到复杂的顺序,告诉大家如何调试 dotnet 系应用,特别是桌面端应用。本文将会向大家介绍使用 VisualStudio 大量的功能用来提高调试效率,穿插着也会介绍一些好用的调试辅助工具,以及如何编写方便调试的代码,期望大家通过阅读本文能有所收获

Roslyn 静态分析

本文告诉大家如何使用 Roslyn 分析代码。

Roslyn 通过 Target 修改编译的文件

本文告诉大家如何使用 Target 进行修改编译时的文件

Roslyn 通过 nuget 统一管理信息

在日常的开发中,如果需要发布多个库,多个库之间的版权和作者等信息都是相同的。如果需要每次更改信息都打开项目进行编辑,这个效率是很低的。本文提供一个方式,通过安装一个 nuget 包就可以自动填写信息。

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

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

Roslyn 获得 sln 文件所在的文件夹

我找了很久没有发现 SolutionDir 这个定义,所以只能通过一个不通用的方法找到

Roslyn 打包 NuGet 包 BuildTransitive 文件夹用于穿透依赖传递拷贝文件

默认的 PackageReference 可以实现传递依赖,传递依赖的含义是是假定 B 项目安装了 A 库,而 C 项目依赖 B 项目,那么 C 项目将会自然拿到 A 库的 DLL 引用。但默认的 NuGet 包的构建指导文件 targets 命令是不会在传递执行的,也就是如上的 C 项目将不会执行 B 项目安装的 A 库里面的 target 内容 有一些项目需要拷贝自定义文件,例如拷贝图片或者一些 Native 的 DLL 等资源。如 WPF 框架需要拷贝 PenIME 等资源。如果只是在最底层的项目安装了库,那为了让可执行文件项目也输出库的资源,就需要在可执行项目上也安装库。以上的方法的不足在于安装复杂,也许会忘记安装 本文告诉大家一个解决方法是通过在制作库的时候,加上 BuildTransitive 文件夹,在此文件夹内添加构建指导文件,此时这个构建指导文件 targets 文件里面的命令将会在传递中执行,也就是说只需要在底层的项目安装即可,不需要在可执行项目上也安装库

Roslyn 如何获得一个类的引用

本文告诉大家如何在 Rosyln 编译一个文件,获得这个文件的类的命名空间

Roslyn 如何在 Target 引用 xaml 防止文件没有编译

在使用新的项目格式,可以使用 Target 添加项目,但是有一些项目需要在合适的时候添加,如果添加早了,那么会让用户看到这些文件,如果添加的时间是在引用编译之后,那么文件将无法进行编译。

Roslyn 如何使用 MSBuild Copy 复制文件

本文告诉大家如何在 MSBuild 里使用 Copy 复制文件

Roslyn 在项目文件使用条件判断

本文告诉大家如何在项目文件通过不同的条件使用不同的方法运行

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

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

dotnet 通过引用 msbuild 程序集实现自己定制编译器

本来我想说的是基于引用 msbuild 程序集来自己做一个编译器,但是想想好像本文做的,和造编译器没啥关系,咱自己调用 msbuild 的 API 而已。本文来告诉大家如何引用 msbuild 程序集,如何在自己的应用程序里面嵌入 msbuild 的构建代码,实现 dotnet build 的效果

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

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

Roslyn 分析器 读取 csproj 项目文件的 AdditionalFiles Item 的 Metadata 配置

定义在 ItemGroup 里面的各个引用文件的 Item 可带上自定义的 Metadata 内容,这部分内容需要转换到 AdditionalFiles 的 Metadata 上才能被分析器所获取

IIncrementalGenerator 增量 Source Generator 生成代码入门 读取 csproj 项目文件的属性配置

本文告诉大家如何在使用 IIncrementalGenerator 进行增量的 Source Generator 生成代码时,读取项目里的项目文件属性,从而实现为项目定制的逻辑。或者是读取 NuGet 包里面的一些配置,从而方便实现逻辑

警惕 Visual Studio 属性求值副作用导致逻辑不符合预期

在 Visual Studio 进行调试的过程,也许大家会碰到一些进入断点和不进入断点时,行为逻辑不相同的情况。在进入断点时,默认启用属性求值或其他隐式函数调用,将会导致属性被求值,进而可能导致执行逻辑不符合预期

WPF 设置窗口不跟随触摸惯性拖动抖动

默认在触摸滑动 ListView 等控件的时候,如果滑动到控件底部,会让 WPF 窗口也跟随触摸惯性滑动

记内存条硬件损坏蓝屏的 dump 文件分析

本文记录我的电脑的内存条的硬件损坏了,导致用着用着就蓝屏,我通过启动和故障恢复配置自动蓝屏打 dump 的功能,在蓝屏时创建了 dump 文件。通过分析 dump 文件大概猜测是内存的问题

WPF 触摸相关

本文整理我写的触摸博客

记 Intel 的 31.0.101.5186 版本驱动带崩 WPF 程序

本文记录一个 Intel 显卡驱动问题,暂时只在 Intel UHD Graphics 770 显卡带 31.0.101.5186 版本的显卡驱动时,才概率复现问题

WPF 开发

本文:我遇到的WPF的坑

Visual Studio 查看项目的能力

在 Visual Studio 里面,可以在项目里面通过配置 DiagnoseCapabilities 查看项目的能力。什么是项目的能力?项目的能力就是对当前项目来说,可以具备 VS 支持的功能,项目功能是确定项目类型、平台和特性的推荐方法

WPF 已知问题 监听 WMI 事件导致触摸失效

本文记录 WPF 的已知问题,在 .NET Core 版本的 WPF 应用里面,应用启动的过程监听 WMI 事件,将导致触摸模块 COM 接口获取失败,进而导致触摸失效

SQLite 由于 mscoree.dll 损坏导致 BadImageFormatException 试图加载格式不正确的程序

本文记录 SQLite.Interop.dll 由于 mscoree.dll 文件损坏而在加载时抛出 BadImageFormatException 错误,错误信息是 0x8007000B 试图加载格式不正确的程序

WPF 触摸到事件

本文从代码底层告诉大家,在触摸屏幕之后是如何拿到触摸点并且转换为事件

dotnet 已知问题 警惕 StreamReader 的 EndOfStream 卡住线程

在 dotnet 里面,咱会经常使用 StreamReader 辅助类读取 Stream 的内容,比如按行读取等。如果在判断是否读取完成时,使用的是 StreamReader 的 EndOfStream 属性,则可能破坏原本的异步出让逻辑,导致线程被卡住

读 dotnet 源代码 为何 Thread.Sleep 半毫秒和一毫秒等待时间差距如此之大

本文记录我读 dotnet 的源代码了解到为什么调用 Thread.Sleep 的时候,传入的是不足一毫秒,如半毫秒时或 0.99 毫秒,与传入是一毫秒时,两者的等待时间差距非常大

dotnet 9 WPF 支持 Style 的 Setter 填充内容时可忽略 Value 标签

本文记录 WPF 在 dotnet 9 的一项 XAML 编写语法改进点,此改进点用于解决编写 Style 的 Setter 进行给 Value 赋值时,不能将 Value 当成默认内容,需要多写 Value 标签的问题。通过此改进点可减少两行 XAML 代码