阅读本文,你可以了解如何编写开发和调试 XAML 构建为 Baml 和 g.cs 文件的过程和工具。本文也适合想要了解 WPF 的 XAML 构建过程的开发者阅读,本文提供了可以断点调试 WPF 的 XAML 构建过程的方法和代码

本文非新手友好,有大量构建和预编译知识,请在阅读本文之前自行了解这部分知识。更多请看 手把手教你写 Roslyn 修改编译

在 WPF 中,构建 XAML 用的是 PresentationBuildTasks 任务进行构建,核心使用的是 dotnet sdk 提供的构建调度功能,将 XAML 的构建调度到 PresentationBuildTasks 任务,由此工具进行构建。使用 PresentationBuildTasks 任务可以构建出 Baml 和 g.cs 等文件

在 WPF 开源仓库里面,包含了 PresentationBuildTasks 的所有源代码。在 dotnet sdk 里面,包含了调试 XAML 构建的后门,允许开发者指定 PresentationBuildTasks 为自己的开发版本

下面以调试 Walterlv.Demo.XamlProperties 测试项目的 XAML 构建过程作为例子,告诉大家如何让 dotnet 在构建 WPF 项目时,使用自定义的 PresentationBuildTasks 任务进行构建

先在 Walterlv.Demo.XamlProperties.csproj 文件里面添加如下代码

  <PropertyGroup>
<_PresentationBuildTasksTfm Condition="'$(MSBuildRuntimeType)' == 'Core'">netcoreapp2.1</_PresentationBuildTasksTfm>
<_PresentationBuildTasksTfm Condition="'$(MSBuildRuntimeType)' != 'Core'">net472</_PresentationBuildTasksTfm>
<_PresentationBuildTasksAssembly>$(MSBuildThisFileDirectory)..\PresentationBuildTasks\bin\Debug\$(_PresentationBuildTasksTfm)\PresentationBuildTasks.dll</_PresentationBuildTasksAssembly>
</PropertyGroup>

以上的代码的 _PresentationBuildTasksAssembly 属性需要修改为你自己的 PresentationBuildTasks 代码构建出来的输出文件路径。在 dotnet 里面,如果在 VisualStudio 里面,那么将加载 .NET Framework 4.7.2 版本的 PresentationBuildTasks.dll 的文件。如果是在命令行执行 dotnet build 命令,此时将加载 .NET Core 2.1 的 PresentationBuildTasks.dll 的文件。此部分知识请参阅 从零开始制作 NuGet 源代码包(全面支持 .NET Core / .NET Framework / WPF 项目) - walterlv在项目文件 / MSBuild / NuGet 包中编写扩展编译的时候,正确使用 props 文件和 targets 文件 - walterlv如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包 - walterlv

而 PresentationBuildTasks 的代码可以从 WPF 开源仓库里面的 src\Microsoft.DotNet.Wpf\src\PresentationBuildTasks 文件夹拿到代码,只是这里面的代码构建需要做一些配置

我给大家提供了我的版本,此版本包含了 Walterlv.Demo.XamlProperties 测试项目本身,使用方法是将我的代码拉到你的本地。请在使用时,安装好 .NET 5 或更新版本的 SDK 然后将你的需要测试的 XAML 文件和代码加入到 Walterlv.Demo.XamlProperties 测试项目里面。先打开 PresentationBuildTasks.sln 项目,接着使用命令行 dotnet build 构建 Walterlv.Demo.XamlProperties 测试项目

构建时将会弹出 VisualStudio 附加进程调试窗口,选择使用 PresentationBuildTasks.sln 所在的 VisualStudio 进行调试,下一步按下 F10 就可以看到 PresentationBuildTasks 的源代码

获取以上调试版本的方法是先创建一个本地源代码文件夹,此文件夹是一个空文件夹,用来从 GitHub 上拉我的代码。先使用命令行进入到此空文件夹,接下来输入以下代码用来拉代码

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin e9982404d4b51f184f483ba8663ee160befdc8e8

以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源

git remote add origin https://github.com/lindexi/lindexi_gd.git

以上代码包含了作为测试项目的 Walterlv.Demo.XamlProperties.csproj 文件,以及我从 WPF 项目里面拷贝的 PresentationBuildTasks 代码。对比放在 WPF 项目的 PresentationBuildTasks 的代码,我提供的测试代码是没有 WPF 项目的依赖的,不仅构建方便,同时构建速度也快

当然缺点是没有更上 WPF 的源代码版本,需要大家自己手动去拷贝最新的代码

本文提供的代码,其实是准备调试 AttachedProperty cannot be assigned in a XAML file if it is declared in the same project. · Issue #4544 · dotnet/wpf

欢迎大家参与 WPF 框架的开发

当前的 WPF 在 https://github.com/dotnet/wpf 完全开源,使用友好的 MIT 协议,意味着允许任何人任何组织和企业任意处置,包括使用,复制,修改,合并,发表,分发,再授权,或者销售。在仓库里面包含了完全的构建逻辑,只需要本地的网络足够好(因为需要下载一堆构建工具),即可进行本地构建

WPF 框架开发 调试和开发 XAML 构建过程的 PresentationBuildTasks 方法的更多相关文章

  1. Android开发调试无法连接到夜神模拟器的解决方法

    Android开发调试无法连接到夜神模拟器的解决方法: 一般原因是adb的版本不一致造成的!!!!!换成一样的就可以了. 在网上看到的方法,特记录下来: 1.任务管理器里看下,adb.exe以及nox ...

  2. 在cocos code ide的基础上构建自己的lua开发调试环境

    对于一种语言,其所谓开发调试环境, 大体有以下两方面的内容: 1.开发, 即代码编写, 主要是代码提示.补齐, 更高级一点的如变量名颜色等. 2.调试, 主要是运行状态下断点.查看变量.堆栈等. 现在 ...

  3. 玩转VSCode-完整构建VSCode开发调试环境

    随着VSCode的不断完善和强大,是时候将部分开发迁移到VS Code中了. 目前使用VS2019开发.NET Core应用,一直有一个想法,在VS Code中复刻VS的开发环境,同时迁移到VS Co ...

  4. AngularJS开发指南16:AngularJS构建大型Web应用详解

    AngularJS是由Google创建的一种JS框架,使用它可以扩展应用程序中的HTML功能,从而在web应用程序中使用HTML声明动态内容.在该团队工作的软件工程师Brian Ford近日撰写了一篇 ...

  5. 【本人译作推荐】Windows 8应用开发:C#和XAML卷(原名:Building Windows 8 Apps with C# and XAML)

    [图书推荐] 译名:Windows 8应用开发:C#和XAML卷 原名:Building Windows 8 Apps with C# and XAML   编辑推荐 国内第一本使用XAML与C#语言 ...

  6. Xamarin.Forms移动开发系列4 :XAML基础

    摘要 本文介绍Xamarin.Forms创建用户界面的语言:XAML基础部分. 前言 本文介绍Xamarin.Forms定义用户界面的语言:XAML. 本篇篇幅较长,主要讲述XAML语法,以及对其他基 ...

  7. .net core/5/6/7中WPF如何优雅的开始开发

    WPF是微软的.net平台中的一个桌面客户端应用程序框架,经常用于企业开发windows桌面客户端,广泛应用于中小企业快速开发一款工具,本人也是比较喜欢利用WPF开发一些小工具. 目录 知名案例 .n ...

  8. 渐进式框架、自底向上增量开发的vue

    官网对vue.js的介绍是这样的: 一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计. 那么到底什么是渐进式框架.自底向上增量开发又是什么呢? 其实我觉得这 ...

  9. 搭建Hadoop2.5.2+Eclipse开发调试环境

    一.简介 为了开发调试方便,本文介绍在Eclipse下搭建开发环境,连接和提交任务到Hadoop集群. 二.安装前准备: 1)Eclipse:Luna 4.4.1 2)eclipse插件:hadoop ...

  10. 10个Visual Studio原生开发调试技巧

    10个Visual Studio原生开发调试技巧(1) 2013-05-29 13:30 佚名 开源中国 我要评论(1) 字号:T | T 以下的列表中你可以看到写原生开发的调试技巧(接着以前的文章来 ...

随机推荐

  1. ItemsControl和ListView、ListBox的区别

    1.ItemsControl用来显示一个数据项的集合,它的底层是一个列表,它可以非常灵活的展示布局和数据 以下是例子 <ItemsControl ItemsSource="{Bindi ...

  2. 记录--用three.js渲染真实的下雨效果

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 建模 首先我们需要一些贴图素材 贴图素材一般可以在3dtextures网站上找到,这里我找了2份,包含了墙的法线贴图和潮湿地面的法线.透明 ...

  3. Hong Kong Azure / .NET club first meetup - WPF business value in the financial industry

    The first meeting of the Hong Kong Azure / .NET Club was held on December 29, 2019 at Starbucks, She ...

  4. mybatis调用Oracle存储过程 带游标

    存储过程 CREATE OR REPLACE PROCEDURE proc_test2(p_id IN NUMBER, v_cur OUT SYS_REFCURSOR, p_result_code O ...

  5. Ubuntu系统部署springcloud+nacos遇到的问题。

    1,部署上的jar包运行正常,但是通过浏览器不能访问,telnet +IP+端口连接不通.小皮面板访问后台接口也是不通但是小皮面板可以通过浏览器访问.具体问题暂未解决. 2,改用docker部署,将j ...

  6. bram_to_vid

    Entity: bram_to_vid File: bram_to_vid.v Diagram Description Company: Fpga Publish Engineer: FP Revis ...

  7. KingbaseES 执行计划常见节点介绍

    KingbaseES中explain命令来查看执行计划时最常用的方式.其命令格式如下: explain [option] statement 其中option为可选项,常用的是以下5种情况的组合: a ...

  8. KingbaseES V8R6 复制冲突之锁类型冲突

    背景 昨天遇到客户现场的一个有关复制冲突的问题 备库报错:ERROR: canceling statement due to conflict with recovery,user was holdi ...

  9. KingbaseES Json 系列三:Json数据操作函数一

    KingbaseES Json 系列三--Json数据操作函数一(JSONB_EACH,JSONB_EACH_TEXT,JSONB_OBJECT_KEYS,JSONB_EXTRACT_PATH,JSO ...

  10. archlinux xfce 设置窗口背景颜色,QT背景颜色

    1.使用xfce主题 2.有QT背景不覆盖,使用配置 sudo pacman -S qt5-ct 3.在/etc/environment添加环境变量 QT_QPA_PLATFORMTHEME=qt5c ...