lindexi

林德熙 - Windows 10 App Developer

林德熙

IIncrementalGenerator 增量 Source Generator 生成代码入门 从语法到语义 获取类型完全限定名

本文告诉大家如何在使用 IIncrementalGenerator 进行增量的 Source Generator 生成代码时,如何从语法分析过程,将获取的语法 Token 转换到语义分析上,比如获取类型完全限定名。一个使用的例子是在拿到一个 Token 表示某个类型时,本文将演示通过语义分析获取到拿到的 Token 的 Type 类型的 FullName 带命名空间的完全限定名

dotnet C# 推荐一个适合新手入门阅读学习的控制台游戏项目

对于 C# 编程新手,学习语法和框架是必要的,但是如何将它们灵活地运用到实际项目中,是一个更高层次的挑战。如果只是死记硬背语法规则和框架用法,而没有足够的编程实践,很难提高编程水平和逻辑思维。这个时候,阅读一些优秀的开源项目,可以让我们从中学习到别人的编码风格、代码组织方式,代码逻辑编写等等,从而提升自己的 C# 语言能力和对 dotnet 框架的掌握。本文要推荐给大家的,是一个非常有趣且适合新手入门的控制台游戏项目。这个项目是 dotnet 组织下的一个开源项目,里面包含了许多经典游戏,这些游戏都是用 C# 语言编写的,而且只用到了基础控制台功能,没有涉及到复杂的图形界面或者网络通信等技术。因此,这个项目对于前置知识要求很低,只要你掌握了 C# 的基本语法和数据结构,就可以轻松地阅读和理解它们。同时,这些游戏又非常有趣和富有挑战性,你可以在玩游戏的同时学习到很多编程技巧和逻辑思路。这个项目看起来十分适合新手阅读和学习

博客导航

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

尝试 IIncrementalGenerator 进行增量 Source Generator 生成代码

在加上热重载时,源代码生成 Source Generator 的默认行为会让 Visual Studio 有些为难,其原因是热重载会变更代码,变更代码触发代码生成器更新代码,代码生成器更新的代码说不定又会有某些逗比逻辑再次触发热重载。于是就会发现在某些复杂的项目下,开启热重载之后,在编辑并继续界面将会等非常久,甚至再也无法继续。为了解决这个问题,大聪明设计了 Incremental Generators 机制,此 Incremental Generators 机制和 Source Generator 不冲突,被设计用来解决热重载的源代码生成性能问题,本文将告诉大家此新的 API 的入门级使用

dotnet 用 SourceGenerator 源代码生成技术实现中文编程语言

相信有很多伙伴都很喜欢自己造编程语言,在有现代的很多工具链的帮助下,实现一门编程语言,似乎已不是一件十分困难的事情。我利用 SourceGenerator 源代码生成技术实现了一个简易的中文编程语言,核心原理是将中文编程语言翻译为 C# 语言,从而完成后续的所有对接,完成了最简单的构建和运行。本文将告诉大家这个有趣的方式是如何实现

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

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

Roslyn 打包自定义的文件到 NuGet 包

在使用 sdk 格式的项目文件支持快速进行打包,但使用这个方式打包的时候将默认只带程序集输出文件,而没有带依赖的文件。本文告诉大家如何在打包的时候加上需要放在包里面的文件

非技术 做事情的急和快的差别

我的坑队友给我推荐了一本书,开始他吹的特别好,然而我花了一点时间下载下来,再看了几页之后,我发现这就是一本毒鸡汤。然而看都看了,还是要写写读书笔记的

dotnet C# 通过 Vortice 使用 Direct2D 的 ID2D1CommandList 入门

本文将告诉大家如何通过 Vortice 使用 D2D 的 CommandList 功能

dotnet C# 如何使用 MemoryFailPoint 检查是否有足够的内存资源来执行操作

在 dotnet 里面的 MemoryFailPoint 可用来测试当前进程是否还能分配申请给定大小的内存空间,这个是一个高级编程的类型,大部分情况下都不需要用到。本文内容由 New Bing 编写,将和大家介绍 MemoryFailPoint 的使用方法

dotnet C# 通过 Vortice 使用 Direct2D 特效入门

本文将告诉大家如何通过 Vortice 使用 D2D 的特效

dotnet DirectX 通过 Vortice 控制台使用 ID2D1DeviceContext 绘制画面

在上一篇博客里面告诉大家,如何使用 Vortice 从零开始控制台创建 Direct2D1 窗口。上一篇博客采用的是 CreateDxgiSurfaceRenderTarget 的方式拿到了 ID2D1RenderTarget 进行绘制,本文将和大家介绍另一个方式,通过 ID2D1DeviceContext 绘制画面。从底层来说,这两个方式底层都是相同的,只是上层的 API 调用方法不相同而已

程序猿修养 给属性一个单位

在上小学有一道题目是半杯50度的水加上半杯50度的水等于什么,我傻傻写了半杯100度的水。当时我还是逗者级别的,现在是逗尊级别了。在写代码的时候会看到莫名一个不带单位的变量或属性,总是会觉得我会加出100度出来。什么是不带单位的属性?例如我看到了有人写了一个属性叫字体大小的,这个属性是 double 值,这就好玩了,请问这是一个像素单位还是磅单位。程序猿修养给属性一个单位,可以提升代码可读性

WPF 对接 Vortice 在 Direct2D 绘制从 WIC 加载的图片

本文告诉大家如何通过 Vortice 在 Direct2D 里面绘制图片,图片的来源是 WIC 加载出的图片

WPF 对接 Vortice 调用 WIC 加载图片

本文将告诉大家如何通过 Vortice 库从底层的方式使用 WIC 层加载本地图片文件,解码为 IWICBitmap 图片,然后将 IWICBitmap 图片交给 WPF 进行渲染

dotnet win32 使用 WIC 获取系统编解码器

在 Windows 系统上,有一个很重要的概念是 Windows Imaging Component 也就是 WIC 层,这是专门用来处理多媒体相关的系统组件,特别是用来处理图片相关,包括编码和解码和处理图片。开发者可以扩展 WIC 层的编解码器,从而让系统可以支持更多格式的多媒体文件。本文将告诉大家如何获取当前系统上在 WIC 层安装的图片编解码器,从而了解当前系统支持哪些格式的图片

使用 DISM 安全清理 C 盘 WinSxS 文件夹空间

本文将介绍如何使用系统内置 DISM 工具进行安全清理 C 盘空间,清理 WinSxS 文件夹里面的可回收删除的程序包空间

dotnet 一些代码审查套路

本文记录一些代码审查套路,在看到小伙伴写出某些代码的时候可以告诉他这样写有锅

UWP WinRT 使用系统自带的分词库对字符串文本进行分词

本文将和大家介绍在 UWP 应用,或其他能接入 WinRT 的应用里,使用系统自带的分词库,对中文、英文等等自然语言的字符串文本进行分词

WPF 通过 WindowsAppSDK 使用 WinRT 的手写识别功能

本文告诉大家如何在基于 .NET 6 的 WPF 使用 WinRT 的手写识别功能

WPF 性能测试

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

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

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

WPF 不安装 WindowsAppSDK 使用 WinRT 功能的方法

安装 Microsoft.WindowsAppSDK 库会限制应用程序只能分发 windows 10 应用,如果自己的应用程序依然需要兼容 Win7 等旧系统,那直接采用安装 WindowsAppSDK 方法将会丧失兼容旧系统能力。本文和大家介绍无需安装 Microsoft.WindowsAppSDK 即可使用 WinRT 功能的方法,此方法可以让应用程序继续兼容旧系统,可以在应用程序内判断系统版本之后自行决定调用 WinRT 功能

WPF 触摸屏应用需要了解的知识

我从 2017 进入大屏触摸这个行业,主要是做桌面软件这一块。在大屏交互平板这个行业里面的还能看的上去的应用,都是使用 WPF 做的。本文就来和大家聊聊在触摸屏应用开发的时候需要了解的软硬件知识。阅读本文你将能大概了解这个行业的一点知识

C# 不能用于文件名的字符

在 Windows 有一些字符是不能作为文件名,尝试重命名一个文件,输入/ 就可以看到 windows 提示的不能作为文件名的字符

UWP 和 WPF 对比

本文告诉大家 UWP 和 WPF 的一些不同之处

WPF 使用 Direct2D1 画图 绘制基本图形

本文来告诉大家如何在 Direct2D1 绘制基本图形,包括线段、矩形、椭圆

WPF 使用 Silk.NET 进行 Direct2D 渲染入门

在上一篇博客的基础上,使用 dotnet 基金会新开源的 Silk.NET 库,让 Silk.NET 创建的 DX 设备和 WPF 对接渲染。接下来本文将告诉大家如何使用 Silk.NET 提供的 Direct2D 底层封装,在 WPF 上绘制出界面

OpenTK 入门 Vsync 垂直同步对刷新率的影响

本文将和大家介绍 Vsync 垂直同步的开启对 OpenTK 应用的刷新率的影响

OpenTK 入门 初始化窗口

本文属于 OpenTK 入门博客,这是一项使用 C# 做底层调用 OpenGL 和 OpenAL 和 OpenCL 的技术。但值得一提的是,如果是想做渲染相关的话,当前是不建议使用 OpenGL 的,无论是从性能上还是其他方面,都不具备优势

dotnet 6 为什么网络请求不跟随系统网络代理变化而动态切换代理

本文记录在 dotnet 6 的网络和在 .NET Framework 的行为的变更。在 dotnet 6 下,默认的网络请求在系统网络代理变更的时候,是不会动态切换代理的。例如在应用运行进行网络通讯之后,打开 Fiddler 抓包,此时将会发现 Fiddler 抓不到包,只有在应用重启之后才能抓到。或者是开着 Fiddler 抓包,然后退出 Fiddler 之后应用就断网了

WPF 从零自己实现从 RealTimeStylus 获取触摸信息

本文将告诉大家什么是 RealTimeStylus 以及如何从零开始不使用 WPF 框架提供的功能从 RealTimeStylus 获取到触摸信息

WPF 触摸底层 PenImc 是如何工作的

在 WPF 里面有其他软件完全比不上的超快速的触摸,这个触摸是通过 PenImc 获取的。现在 WPF 开源了,本文就带大家来阅读触摸底层的代码,阅读本文需要一点 C# 和 C++ 基础

WPF 触摸相关

本文整理我写的触摸博客

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

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