lindexi

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

林德熙

博客导航

本文记录我写的博客和我收集的博客

Windows 调试工具课程

Windows 调试工具课程——在软件万种死法中调试出原因

dotnet 读 WPF 源代码笔记 从 WM_POINTER 消息到 Touch 事件

本文记录我读 WPF 源代码的笔记,本文将介绍在 WPF 底层是如何从 Win32 的消息循环里获取到的 WM_POINTER 消息处理转换作为 Touch 事件的参数

dotnet 源代码生成器分析器入门

本文将带领大家入门 dotnet 的 SourceGenerator 源代码生成器技术,期待大家阅读完本文能够看懂理解和编写源代码生成器和分析器

WPF 从裸 Win 32 的 WM_Pointer 消息获取触摸点绘制笔迹

本文将告诉大家如何在 WPF 里面,接收裸 Win 32 的 WM_Pointer 消息,从消息里面获取触摸点信息,使用触摸点信息绘制简单的笔迹

WPF 性能测试

本文收藏我给 WPF 做的性能测试。在你开始认为 WPF 的性能存在问题的时候,不妨来这篇博客里找找看我做过的测试。我记录的测试都是比较纯净的测试项目,没有业务逻辑的干扰,写法也正常,可以更加真实反映 WPF 的性能,减少因为奇怪的业务逻辑以及逗比的写法的影响

Windows 通过编辑注册表设置左右手使用习惯更改 Popup 弹出位置

本文告诉大家如何在通过更改注册表的设置,从而更改平板电脑设置 Tablet PC Settings 的左右手使用习惯 Handedness 的惯用左手和惯用右手选项

dotnet 配合 GitHub 的 Action 做自动推 Tag 时打包 NuGet 包

被微软收购的 GitHub 越来越好用,拥有大量免费的工具资源和构建服务器资源,再加上私有项目的无限制使用,我有大量的项目都在向 GitHub 迁移。通过 GitHub 的 Action 的自动构建,可以用上微软土豪的服务器资源,进行自动化测试和构建。对于 CBB 来说,发布就是打出 NuGet 包然后上传到内部 NuGet 服务器。此时遇到的问题是,如何在 GitHub 上执行打包,打包的时候如何指定 NuGet 包的版本号。因为 CBB 的特殊性,我要求每个 NuGet 正式发布的包都应该有一个对应的 Tag 号,这样将 NuGet 库安装到项目里面,之后发现问题了还能找到对应版本的代码

dotnet 配合 Gitlab 做自动推 Tag 时打包 NuGet 包

我现在的团队内部用的是 Gitlab 工具,在此工具上提供了 Gitlab CI CD 用于做自动化测试和构建。对于 CBB 来说,发布就是打出 NuGet 包然后上传到内部 NuGet 服务器。此时遇到的问题是,如何在 Gitlab 上执行打包,打包的时候如何指定 NuGet 包的版本号。因为 CBB 的特殊性,我要求每个 NuGet 正式发布的包都应该有一个对应的 Tag 号,这样将 NuGet 库安装到项目里面,之后发现问题了还能找到对应版本的代码 本文告诉大家如何配合 Gitlab 做自动推 Tag 时打包 NuGet 包。也就是本地打一个 Tag 号,推送到 Gitlab 上,就会出发 Gitlab 的自动构建,自动构建里面将会获取 Tag 版本号,然后打出 NuGet 包推送到服务器

支持较低 GLibC 版本的 dotnet AOT GitHub Action 构建方法

无论是麒麟还是 UOS 系统,所采用的 GLibC 版本都比较低。默认在 GitHub Action 上构建用的是 ubuntu-latest 较新的版本。进行 AOT 发布的 dotnet 程序将因为 GLibC 版本太新,而无法在麒麟或 UOS 等国产化系统上跑起来

制作一个能构建 dotnet AOT 的 gitlab runner 的 Debian docker 镜像

我的需求是需要有一个能够构建出 dotnet 的 AOT 包的环境,要求这个环境能解决 glibc 兼容依赖的问题,能打出来 x64 和 arm64 的 AOT 的包,且能够运行 gitlab runner 对接自动构建

如何给 CI CD 服务器搭建上 .NET 5 构建和运行环境

在 2020.11.10 官方正式发布了 .NET 5 正式版。而我花了一周的时间进行踩坑和预研,本文将告诉大家如何在自动化服务器上搭建 dotnet 5 的构建和运行环境

dotnet 基于 debian 创建一个 docker 的 sdk 镜像

我不能用官方的镜像,因为我需要在小伙伴构建的 debian 镜像上面安装 dotnet sdk 用来做构建,其实在 docker 里面需要找到一个个文件,然后复制代码

dotnet 简单方法在一个进程内同时跑起 WPF 和 ASP.NET Core 框架

从设计架构上,无论是 WPF 还是 ASP.NET Core 框架,都是在 dotnet 运行时上层的应用,两个框架处于平级的结构。理论上讲,两个平级的框架只要不存在特殊的情况,都是能够相容存在的。本文将和大家介绍一个非常简单的方法,在一个进程内同时跑起 WPF 和 ASP.NET Core 框架

WPF 引用 ASP.NET Core 的 AOT 版本

之前我写过博客让 WPF 和 ASP.NET Core 跑在一个应用程序进程里面,这样的方式十分简单方便,缺点是输出路径会带一些 ASP.NET Core 的 DLL 文件。本文将来尝试对 ASP.NET Core 进行 AOT 发布为类库,通过类库调用方式在 WPF 里引用 ASP.NET Core 开启 HTTP 服务

人工智能与睡眠的胡思乱想

这是我今天在散步过程的胡思乱想内容

Avalonia 制作 AOT 单文件

对 Avalonia 进行 AOT 发布时,会发现存在几个库文件无法被打进入到 exe 可执行文件里面,于是进行分发的时候又需要进行压缩。现在很多用户已经不懂如何解压缩了,我就在想着如何只发布单个文件

WPF 使用 WNetUseConnection 连接 SMB 网络资源

本文将和大家演示如何在 WPF 里面,使用 WNetUseConnection 连接 SMB 网络资源

dotnet X11 获取多屏 edid 信息

故事的背景我在一个双屏设备上,我想要获取每个显示器屏幕对应的 EDID 信息。我在一台麒麟系统的设备上,通过 RandR 的方式获取 EDID 信息,进而读取屏幕物理设备信息

X11 设置多屏下窗口在哪个屏幕上全屏

在 X11 里面,可以指定一个窗口应该在哪个屏幕上全屏显示,甚至可以指定窗口横跨几个屏幕显示

dotnet C# 从控制台开始 关联 Win2D 和 WinUI 3 应用

本文将告诉大家如何从最简单的控制台开始搭建,让 Win2D 和 WinUI 3 关联起来,让 Win2D 可以将内容渲染到 WinUI 3 应用上

Roslyn 简单实现代码智能提示补全功能

相信有很多伙伴热衷于编写 IDE 应用,在 dotnet 系下,通过 Roslyn 友好的 API 和强大的能力,实现一个代码智能提示是非常简单的事情。本文将和大家简单介绍一下如何使用 Roslyn 实现简单的代码智能提示补全功能

记 X11 里面触摸的一些行为

这是我在学习 CPF 和 Avalonia 过程中,编写的 X11 触摸测试程序所测试到的一些行为

dotnet X11 的多屏触摸行为测试

故事的背景是我在给 Avalonia 加上触摸尺寸的支持时,代码审查过程中大佬提出了在多屏上的 X11 行为问题,为此我找了两个触摸屏进行测试 X11 的多屏触摸行为。由于我的设备有限,本文只记录我所测试到的行为

X11 使用 XSetWMNormalHints 固定窗口所在的屏幕

故事的背景是我有一个带来两个屏幕的设备。我计划使用 X11 创建两个窗口,分别让这两个窗口在两个屏幕上。在不做任何处理的情况下,会受到 X 窗口管理器的影响,导致全部都在鼠标最后一次命中的屏幕上显示窗口

dotnet 打包 NuGet 的配置属性大全整理

本文整理 dotnet 打包 CBB 组件为 NuGet 包时可以使用的配置的各个属性

SkiaSharp 使用 HarfBuzz 修复找不到 Symbol 字形

故事的背景是我尝试在纯净的 Debian docker 设备上,使用 Oxage.Wmf 解析转换 WMF 图片,在此过程中我需要使用 SkiaSharp 渲染出字体,一切在 Windows 上跑得好好的,结果在 Linux 上就渲染出方框,无法使用 Symbol 字体渲染出正确的文本

linux 麒麟系统修复 wmf2gd 转换 wmf 图片提示 wmf_ipa_font_map 错误

本文记录在 2403 麒麟系统上,使用 wmf2gd 转换 wmf 图片时提示 ERROR: font.c (1334): wmf_ipa_font_map: failed to load any font! 错误问题

dotnet C# 基础二进制处理 二进制数组与结构体的互转

本文将告诉大家在 dotnet 里面的二进制基础处理知识,如何在 C# 里面将结构体数组和二进制数组进行相互转换的简单方法

Office 使用 OpenXML SDK 解析文档博客目录

本文收集 Office 解析相关博客

WPF 使用 SharpDx 渲染博客导航

我写了很多在 WPF 使用 SharpDx 渲染的博客,但是有小伙伴吐槽说这些博客没有一个好看的顺序,我将所有的 SharpDx 的博客按照顺序放在下面

使用 Silk.NET 调用 DirectWrite 获取字体 Font Metrics 信息

本文将告诉大家在 dotnet 里面,通过 Silk.NET 库调用 DirectWrite 获取给定字体的 Font Metrics 信息

dotnet 简单聊聊 Skia 里的 SKFontMetrics 的各项属性作用

本文将和大家简单聊聊 Skia 里的 SKFontMetrics 的各项属性作用和代表的含义

开源实战

本文记录我参与的开源项目

定制 MSTest 单元测试框架 让一个 TestMethod 包含多个测试用例

在默认的 MSTest 单元测试框架里面,每个标记了 TestMethodAttribute 特性的方法,都只有一个测试用例。本文通过 ITestDataSource 接口辅助实现让一个 TestMethod 包含多个测试用例