lindexi

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

林德熙

IIncrementalGenerator 增量 Source Generator 生成代码入门 获取项目默认命名空间

本文将告诉大家如何在分析器里面获取到项目的默认命名空间

IIncrementalGenerator 增量 Source Generator 生成代码入门 读取解析 ValueTuple 的定义

本文将告诉大家如何在分析器里面解析代码里面对于 ValueTuple 的定义,包括如何获取 ValueTuple 里面的 Item 的类型和命名

IIncrementalGenerator 增量 Source Generator 生成代码入门 获取引用程序集的所有类型

本文告诉大家如何在使用 IIncrementalGenerator 进行增量的 Source Generator 生成代码时,如何获取到当前正在分析的程序集所引用的所有的程序集,以及引用的程序集里面的所有类型

IIncrementalGenerator 增量 Source Generator 生成代码入门 判断程序集的引用关系

本文将告诉大家如何在 IIncrementalGenerator 增量 Source Generator 生成代码里面,在 Roslyn 分析器里面判断两个程序集是否存在引用关系

SemanticKernel 将 LLM 自然语言函数和传统编程融合到一起

本文将继续和大家介绍 SemanticKernel 神奇的魔法,将使用 LLM 大语言模型编写的自然语言函数和传统的编程语言编写的函数融合到一起的例子。通过本文的例子,大家可以看到 SemanticKernel 框架所推荐的一个工作模式,同时可以更好的理解 SemanticKernel 框架的用法

ASP.NET Core 6 浅析环境变量与配置的优先级

本文将简单介绍在 dotnet 6 下的 ASP.NET Core 里的环境变量当成配置的优先级行为。这部分内容在官方文档都有提到,只是我开始粗心没有看仔细,而踩到了坑,特意写篇博客记录一下

dotnet SemanticKernel 入门 注入日志

使用 SemanticKernel 框架在对接 AI 时,由于使用到了大量的魔法,需要有日志的帮助才好更方便定位问题,本文将告诉大家如何在 SemanticKernel 注入日志

dotnet SemanticKernel 入门 调用原生本机技能

本文将告诉大家如何在 SemanticKernel 里面调用原生本机技能,所谓原生本机技能就是使用 C# 代码编写的原生本地逻辑技能,这里的技能可讲的可不是游戏角色里面的技能哈,指的是实现某个功能的技能,这是构成 AI 强大能力的基础

dotnet SemanticKernel 入门 自定义变量和技能

本文将告诉大家如何在 SemanticKernel 框架内定义自定义的变量和如何开发自定义的技能

dotnet SemanticKernel 入门 将技能导入框架

在上一篇博客中和大家简单介绍了 SemanticKernel 里的技能概念,接下来咱准备将 技能 导入到 SemanticKernel 框架里面,进行一个管道式调用

dotnet 6 在 win7 系统 AES CFB 抛出不支持异常

本文记录在 win7 系统上调用 AES 加密时,采用 CFB 模式,可能抛出 CryptographicException 异常

非技术 对以后各大应用功能与 AI 助手的思考

本文记录我对于 AI 助手在未来给各大应用或网站或设备带来的影响的思考

Windows 官方提供的触屏硬件延迟测量方法

本文记录微软 Windows 官方在 Windows Hardware Lab Kit 提供的触屏硬件延迟测量方法

WPF 设置 IncludePackageReferencesDuringMarkupCompilation 属性导致分析器不工作

本文记录在 WPF 项目里面设置 IncludePackageReferencesDuringMarkupCompilation 属性为 False 导致了项目所安装的分析器不能符合预期工作

WPF 修复 dotnet 6 与源代码包冲突

在 dotnet 6 时,官方为了适配好 Source Generators 功能,于是默认就将 WPF 的 XAML 构建过程中,引入第三方库的 cs 文件,这个功能默认设置为开启。刚好源代码包为了修复在使用 dotnet 6 SDK 之前,在 WPF 的构建 XAML 过程中,不包含第三方库的代码文件,从而使用黑科技将源代码包加入到 WPF 构建 XAML 中。在 VisualStudio 升级到 2022 版本,或者是升级 dotnet sdk 到 dotnet 6 版本,将会更新构建调度,让源代码包里的代码文件被加入两次,从而构建失败

使用 SizeBench 分析 Exe 文件体积

本文将介绍微软开源免费的 SizeBench 工具,使用 SizeBench 工具可以用来分析 Exe 二进制文件的体积,分析 Exe 文件大小里面有哪些是可以优化的

C# 从控制台创建 WinUI 3 应用

本文将告诉大家如何从控制台而不是 WinUI3 模版项目,从零一步步创建出 WinUI 3 应用

dotnet 是否应该对 HttpResponseMessage 调用 Dispose 进行释放

对于 HttpClient 的请求响应值 HttpResponseMessage 来说,既然继承了 IDisposable 接口,自然就是想让大家可以通过 using 或者手动调用 Dispose 进行释放的。本文将来聊聊对 HttpResponseMessage 调用 Dispose 进行释放的意义有多大,有没有必要性的问题

修复 GitLab 的 CI Runner 提示找不到 pwsh 执行文件

本文告诉大家如何修复使用 GitLab 的 Runner 做 CI 时提示 “pwsh”: executable file not found in %PATH% 错误

win10 uwp 笔迹书写预测 墨迹书写加速

在 UWP 的 InkCanvas 里自带了预测书写轨迹的功能,开启此功能可以进行书写预测,从而减少书写延迟。本文将告诉大家如何在 UWP 的 InkCanvas 里开启笔迹书写预测功能

dotnet 给 NuGet 包加上 Aliases 别名解决类型冲突

有时某个相同命名空间相同名字的类型被两个不同的 NuGet 包定义了,尽管这是非常少见的事情,咱需要使用到其中的一个 NuGet 包的类型,但默认情况下将会因为类型冲突而构建不通过。本文将告诉大家如何给 NuGet 包加上 Aliases 别名解决类型冲突

dotnet 警惕 async void 线程顶层异常

在应用程序设计里面,不单是 dotnet 应用程序,绝大部分都会遵循让应用在出现未处理异常状态时终结的原则。在 dotnet 应用里面,如果一个线程顶层出现未捕获异常,则应用进程将会被认为出现异常状态而退出。通常来说就是未捕获异常导致进程闪退

MAUI 框架开发 将 MAUI 嵌入到 WPF 控件里

本文将介绍如何将 MAUI 的底层替换为 WPF 框架层,且将 MAUI 的内容嵌入到 WPF 的一个控件里面,无 UI 框架嵌入的空域问题

庆贺博客五百万访问量

我的技术博客总访问量已经突破了五百万,这让我感到非常兴奋和自豪,我想在这篇博客中庆祝一下这个里程碑。我想和大家分享一些关于我的技术博客的访问情况。通过分析访问数据,我发现不同类型的技术博客在不同时间段的访问量也有所不同。同时,我也想借此机会感谢大家的支持和阅读,我将会继续编写更多有趣的技术博客。

WPF 项目文件不加 -windows 的引用 WPF 框架方式

默认情况下的 WPF 项目都是带 -windows 的 TargetFramework 方式,但有一些项目是不期望加上 -windows 做平台限制的,本文将介绍如何实现不添加 -windows 而引用 WPF 框架

msbuild Roslyn 行为详解

本文来告诉大家 msbuild Roslyn 的行为,本文非新手友好

Roslyn 引用某个文件夹所有文件作为链接

在 SDK 格式的项目文件可以通过简单代码引用某个文件夹里面指定后缀的文件作为项目文件

WPF 已知问题 InputEventArgs 的 Timestamp 属性是静态的导致事件之间相互影响

本文记录一个 WPF 已知的设计问题,当前此问题已经被大佬修复,这个设计问题刚好属于比较边缘的模块,我写了这么多年的代码还没有踩到这个坑一次,也没有听到有谁提到这个坑

dotnet 6 已知问题 ManualResetEventSlim 的 Set 方法抛出空异常

本文记录一个 dotnet 6 已知问题,此问题预计是在 .NET Framework 4.5 时就引入的,我没有考古在 .NET Framework 4.5 之前是否还存在此问题。当前这个问题在 .NET 7 修复

WPF 将 StaticResource 和 ResourceDictionary 放在一起的魔幻行为

本文将记录一些在 WPF 里面,使用 StaticResource 将 ResourceDictionary 玩坏的做法。大家可以放心的是,这些玩法基本只有高级玩家或逗比开发者才会使用到

WinUI 3 修复非打包应用运行提示缺少 Windows App Runtime 环境

本文将告诉大家如何修复 WinUI 3 非打包的应用,在分发给到客户时,在客户的机器上运行提示缺少 Windows App Runtime 环境

WPF 性能测试

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

WPF 使用 SharpDx 渲染博客导航

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

WPF 设置资源字典多线程安全读写方法

在 WPF 中,使用 ResourceDictionary 本身不会受到创建线程同步影响,意味着可以在任意的线程创建 ResourceDictionary 资源字典,然后在任意线程使用。但是此时的读写需要有时间上的差距,否则将会多线程读写不安全。在 ResourceDictionary 有一个 CanBeAccessedAcrossThreads 属性用来决定在进行读写的时候是否加上锁,但这个属性是内部的,需要通过黑科技更改才能用上

WPF 使用 Dispatcher 的 InvokeAsync 和 BeginInvoke 的异常处理差别

一般认为 WPF 的 Dispatcher 的 InvokeAsync 方法是 BeginInvoke 方法的平替方法和升级版,接近在任何情况下都应该在业务层使用 InvokeAsync 方法代替 BeginInvoke 方法。然而在异常的处理上,这两个方法还是有细微的差别的,不能说是坏事,依然可以认为使用 InvokeAsync 方法代替 BeginInvoke 方法是正确的。本文将记录这两个在抛出异常时,进入的统一异常处理事件的差别