lindexi

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

林德熙

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

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

博客导航

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

dotnet C# 警惕可空结构体的方法内部赋值无效

本文将记录一个 C# dotnet 里的一个稍微隐藏的行为,那就是如果有一个结构体存在某个的方法,此方法的作用是修改结构里面的字段或属性的值,那此时将会在可空的结构体调用此方法时,发现没有真正修改到可空结构体局部变量本身

从 WPF 搬迁到 UOS 下的 UNO 的笔记

本文记录我将一个小 WPF 应用搬迁到 UNO 框架,用于支持统信 UOS 系统时开发经验

WPF 探索任务管理器的进程分组逻辑

在看到 Win10 或 Win11 的 Task Manager 任务管理器时,不知大家是否有一个疑问,在 进程 标签里的应用进程是如何分组的。为什么有些组能包含很多个不同的进程,有些只能包含一个。本文将使用 WPF 写一个简单的应用来告诉大家任务管理器的进程分组策略

探索 dotnet core 为何在 Windows7 系统需要补丁的原因

在一些 Windows 7 系统上,根据 dotnet 官方文档,需要安装上 KB2533623 补丁,才能运行 dotnet core 或 .NET 5 等应用。尽管非所有的设备都需要安装此,但这也让应用的分发不便,安装包上都需要带上补丁给用户安装。此补丁同时也要求安装完成之后重启系统,这对用户端来说,也是较不方便。本文来聊聊为什么 dotnet core 一系的框架依赖于此补丁

UNO WinUI 已知问题 在 XAML 条件构建里将 win 平台加入 Ignorable 将构建失败

如果在 UNO 项目里面,为了进行 XAML 条件构建,将 win 平台加入到 mc:Ignorable 里面,将会在构建时提示 Xaml Internal Error error WMC9999: Unexpected ‘NONE’ in parse rule ‘Element ::= . EmptyElement ( StartElement ElementBody ).’. 错误

UWP WinUI3 传入 AddHandler 的 RoutedEventHandler 类型与事件所需不匹配将抛出参数异常

本文记录一个 UWP 或 WinUI3 的开发过程中的问题,当开发者调用 AddHandler 时,所需的 Handler 参数类型为 RoutedEventHandler 类型,然而实际上正确类型是需要与所监听事件匹配才能符合预期工作,否则将抛出缺乏信息的参数异常

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

本文收集 Office 解析相关博客

将 Source Generator 生成的源代码保存到本地文件

默认的源代码生成器所生成的代码都是没有直接存放到项目文件夹里面的,不受源代码管理工具管理,对使用方的开发者来说很难直接阅读或查找到 Source Generator 生成的源代码。本文将和大家介绍如何使用 EmitCompilerGeneratedFiles 属性配置将生成的代码保存到本地文件

修复 Debian 安装 dotnet 失败 depends on ca-certificates

本文记录我在 Debian 安装 dotnet 失败,报错信息是 packages-microsoft-prod depends on ca-certificates; however: Package ca-certificates is not installed.

UNO 设置平台进入全屏窗口模式的方法

本文记录在 UNO Platform 的桌面窗口项目里,进入和退出全屏窗口的方法,此方法包括 UNO 的 WPF 和 GTK 和 WinUI 版本的实现

dotnet 代码调试方法

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

VisualStudio 通过配置 DefaultXamlRuntime 属性 让控制台项目里的 XAML 应用上智能提示

本文记录一个 VisualStudio 黑科技,通过配置 DefaultXamlRuntime 属性,即可让非 WPF 或 WinUI 或 MAUI 等系列类型的项目也可以拥有 XAML 的智能提示,智能提示方式和 WinUI 智能提示行为相同

dotnet 使用 dnlib 检测插件程序集的 API 兼容性

本文将和大家介绍在开发 dotnet 的插件时,如何通过 dnlib 库检测当前的插件是否由于主应用程序的版本差异导致存在 API 兼容性问题

UNO.Skia.Gtk 设置窗口尺寸变化方法

本文记录一个简单的在 UNO.Skia.Gtk 应用里面,配置 GTK 平台修改窗口尺寸的方法

Pipelines.Sockets.Unofficial 一个纯托管实现对接 System.IO.Pipelines 的 Sockets 库

本文将和大家介绍 Pipelines.Sockets.Unofficial 这个由纯托管代码实现的,对接了 System.IO.Pipelines 的 Sockets 库。这个库不仅代码性能高,且上层调用的 API 足够简洁

dotnet 6 在 Win7 系统证书链错误导致 HttpWebRequest 内存泄露

本文记录我将应用迁移到 dotnet 6 之后,在 Win7 系统上,因为使用 HttpWebRequest 访问一个本地服务,此本地服务开启 https 且证书链在此 Win7 系统上错误,导致应用内存泄露问题。本文记录此问题的原因以及调查过程

dotnet 禁用 SQLite 的 SQLiteFunction 扫描程序集提升启动性能

在我所在的团队开发的一个 WPF 应用程序里面,使用到了 SQLite 作为本地数据库。在优化启动性能过程中,发现了在启动过程一旦访问 SQLite 将会因为 SQLiteFunction 扫描程序集导致 CPU 损耗,从而影响启动性能。本文将告诉大家如何禁用 SQLite 的 SQLiteFunction 扫描程序集

推荐一个使用 HardLink 硬链接减少重复文件占用磁盘空间的工具

在 NTFS 文件系统里面,咱可以使用 HardLink 硬链接的方式,将多个重复的文件链接到磁盘的同一份记录里面,从而减少在磁盘里面对重复文件存储多份记录,减少磁盘空间的占用。本文将和大家推荐我所做的基于 HardLink 硬链接减少重复文件占用磁盘空间的工具

用自动机的思想说明光速

用自动机可以模拟出一个世界,虽然这个世界是虚拟的,但这个世界里面将会根据基础的自动机规则自动推算出很多有趣的规则。在当前的世界里面可以认定光速是最快的,在自动机世界里面也可以认定为有某个东西是具备最快速度,同时如果这个自动机世界里面存在智慧生物那么他将很难猜到自动机的创建规则以及他认为具备最快速度的东西的本质是什么,本文基于一个假定的自动机世界,通过简单的语言告诉大家在自动机里面的光速是什么同时告诉大家这个最快速度对自动机世界的意义

用自动机的思想说明时间断片是无法感知的

用自动机可以模拟出一个世界,虽然这个世界是虚拟的,但这个世界里面将会根据基础的自动机规则自动推算出很多有趣的规则。人类也能很简单理解在自动机模拟的世界里面,在这个世界里面的生物是无法感知时间断片的

分享一个在 dotnet 里使用 D2D 配合 AOT 开发小而美的应用开发经验

本文将分享我在 dotnet 里面使用 Direct2D 配合 AOT 开发一个简单的测试应用的经验。这是我用不到 370 行代码,从零开始控制台创建 Win32 窗口,再挂上交换链,在窗口上使用 D2D 绘制界面内容,最后使用 AOT 方式发布的测试应用。成品文件体积不超过 10MB 且运行内存稳定在 60MB 以内,满帧率运行但 CPU 近乎不动

dotnet 使用增量源代码生成技术的 Telescope 库导出程序集类型

本文将告诉大家在 dotnet 里面使用免费完全开源的基于增量源代码生成技术的 Telescope 库,进行收集导出项目程序集里面指定类型。可以实现性能极高的指定类型收集,方便多模块对接入自己的业务框架

C# 在基类定义好方法让子类继承接口就能实现

在 C# 里面,接口的定义只需要类里面存在和接口声明相同的方法或属性就可以,而存在的方法或属性是在子类定义的还是基类里面定义的都无所谓。也就是在基类里面写好了方法,但不继承接口,等子类继承接口的时候就不需要子类实现方法。通过这样的方法可以在基类里面添加一些辅助方法,而这些方法默认不给子类开启,除非子类继承了接口

二阶熵

小伙伴都知道熵是代表某个系统的混乱程度,而熵值本身是没有啥可以进行衡量的。本文所说的二阶熵仅是一个定义,方便后续我的吹水,用来表示一个混乱的等级

dotnet 测试 SemaphoreSlim 的 Wait 是否保持进入等待的顺序先进先出

本文记录我测试 dotnet 里面的 SemaphoreSlim 锁,在多线程进入 Wait 等待时,进行释放锁时,获取锁执行权限的顺序是否与进入 Wait 等待的顺序相同。测试的结果是 SemaphoreSlim 的 Wait 大部分情况是先进先出,按照 Wait 的顺序出来的,但是压力测试下也存在乱序,根据官方文档说明不应该依赖 SemaphoreSlim 的 Wait 做排队顺序

为 IIncrementalGenerator 增量 Source Generator 源代码生成项目添加单元测试

本文属于 IIncrementalGenerator 增量 Source Generator 源代码生成入门系列博客,本文将和大家介绍如何为源代码生成项目添加单元测试

通过 COM 读取 Office PPT 文件提示 COMException 错误码 0x80004005 可能原因

使用 COM 的方式可以调用本机的 Office 组件进行 PPT 以及 Word 和 Excel 等文件的读写,在打开文件的时候,如果提示 System.Runtime.InteropServices.COMException (0x80004005) 就意味着这是一个通用的错误,没有具体的原因

使用 ForAttributeWithMetadataName 提高 IIncrementalGenerator 增量 Source Generator 源代码生成开发效率和性能

本文将告诉大家如何使用 ForAttributeWithMetadataName 方法用来提高 IIncrementalGenerator 增量 Source Generator 源代码生成的开发效率以及提高源代码生成器的运行效率

WPF 已知问题 开启 IsManipulationEnabled 之后触摸长按 RepeatButton 不会触发连续的 Click 事件

本文记录 WPF 的一个已知问题,在 RepeatButton 上开启 IsManipulationEnabled 漫游支持之后,将会导致触摸长按到 RepeatButton 之上时,不会收到源源不断的 Click 事件

C# dotnet 的锁 SemaphoreSlim 和队列

本文主要是试验在顺序进入等待 SemaphoreSlim 的任务是否会按照顺序经过锁执行

dotnet 测试 Mutex 的 WaitOne 是否保持进入等待的顺序先进先出

本文记录我测试 dotnet 里面的 Mutex 锁,在多线程进入 WaitOne 等待时,进行释放锁时,获取锁执行权限的顺序是否与进入 WaitOne 等待的顺序相同。测试的结果是 Mutex 的 WaitOne 是乱序的,不应该依赖 Mutex 的 WaitOne 做排队顺序

一步步教你在 Windows 上构建 dotnet 系应用的 UOS 软件安装包

本文将详细指导大家如何逐步为 dotnet 系列应用创建满足 UOS 统信系统软件安装包的要求。在这里,我们所说的 dotnet 系列应用是指那些能够在 Linux 平台上构建 UI 框架的应用,包括但不限于 CPF 应用、UNO 应用、Avalonia 应用等