本地编译WPF框架源码

最近,在 排查WPF框架触摸失效和书写 Stroke 绘制的问题,常常需要查看WPF 的源码,由于项目组用到的框架大部分都是 .netFramwork 的,只能通过VS的F12按键反编译或者Dnspy 反编译抓取源码,还要在创建一个新的demo,把反编译的代码整理成demo调试。这样很不方便,也不好调试。于是乎,反正WPF都是开源的,一劳永逸的方式就是本地手动编译WPF框架的源码,这样就好定位问题,至少可以调试源代码。

开始进去正题:

1、先在Github fork 一份 WPF 的源代码:Dotnet9527/wpf at refs/heads/main,用于自己编译调试使用,以后如果有修改东西,也可以贡献到社区上

2、克隆源代码到本机

3、编译准备工作

下载 windows SDK Windows SDK and emulator archive | Microsoft Developer

本次编译,我观察了 "E:\Code\wpf\src\Microsoft.DotNet.Wpf\src\WpfGfx\core\dll\WpfGfx.sln" 这个项目的C++的代码用到的是 10.0.19041.0 的版本,于是,我在我原来win11的版本上,又安装了win10的这个10.0.19041.0 的版本,确保能编译通过

 设置网络能访问外网(搭个梯子),最好网速要快,不然在拉取一些依赖库,很容易超时,导致编译失败

 4、用PowerShell执行编译脚本

PowerShell 进入WPF仓库的根目录下,执行如下的命令行

 .\build.cmd -pack -ci -configuration Debug -prepareMachine /p:Platform=x86

如果网络畅通的情况下,过一会就会出现如下的报错:

 

 这个错误,查阅了资料,在WPF的Issue Unable to build WPF in github action with v6.0.23 · Issue #8343 · dotnet/wpf 上找到了问题修复,就是安装 C++ CLI的工具库(这个根据不同系统、不同的VS,选择的版本有可能不一样)。打开VS的Installer 工具箱,安装C++ CLI

PenImc 项目编译报错

 

继续往下编译,控制台又出现了  PenImc 模块的编译报错:

E:\Code\wpf\src\Microsoft.DotNet.Wpf\src\PenImc\dll\stdafx.h(46,10): error C1083: 无法打开包括文件: “atlbase.h”: No such file o
r directory [E:\Code\wpf\src\Microsoft.DotNet.Wpf\src\PenImc\dll\PenImc.vcxproj]

这个问题查了好多资料,甚至乎在PenImc的C++项目上,手动添加了 atlbase.h 和 atls.lib 的,也不行。C1083无法打开包括文件: “atlbase.h”: No such file or directory-电脑相关-虾米宝库

从网上资料看来,大多都是指向ALT的库,于是乎,我索性把Vs的Installer的所有支持的ALT的依赖库全部安装上去了

 最后再执行   .\build.cmd -pack -ci -configuration Debug -prepareMachine /p:Platform=x86,编译成功了。

 对应的WPF的nuget包已经生成

 

总结一下:

1、编译前,环境要提前配置好,特别是C++的依赖,最好全部安装了

2、搭个好一点的梯子,不然很容易失败,一旦失败就要清理临时文件

 

参考资料:

手把手教你如何构建 WPF 官方开源框架源代码 - lindexi - 博客园

C1083无法打开包括文件: “atlbase.h”: No such file or directory-电脑相关-虾米宝库

Cannot open include file: 'atlbase.h': build failed · Issue #483 · microsoft/terminal

解决 VS 无法打开包括文件: “XXX.h”: No such file or directory问题_无法打开包括文件: “misc.h”: no such file or directory-CSDN博客

 

posted @ 2024-12-14 23:44  wuty007  阅读(26)  评论(0编辑  收藏  举报