gpt4 book ai didi

wpf - 如何将 XAML 转换注入(inject)到我的构建中?

转载 作者:行者123 更新时间:2023-12-04 14:42:26 24 4
gpt4 key购买 nike

我想针对我的 XAML 资源字典运行自定义 EXE。假设我得到的这个 exe 将删除注释、空格和未使用的资源。原始 XAML 文件需要保持不变,但最终出现在 XAP 和 DLL 中的 XAML (silverlight) 和 BAML (wpf) 需要进行转换。它需要在我的计算机和构建服务器上运行。

我的问题是:运行这个 exe 的最简单和最可靠的方法是什么?

我的第一个想法是举办预建事件。但这必须适用于原始 XAML 文件。开发会变得相当痛苦。

当构建后事件运行时,我的资源已经编译到 dll 中。

我有哪些选择?

最佳答案

您应该将“exe”实现为 MSbuild 任务。

本质上,您构建了一个继承自 Microsoft.Build.Utilities.Task 类的 C# 类,并覆盖了 Execute() 方法。

有点像

public class CleanXAML : Task 
{
}

然后您指定(在您的构建文件或您导入的外部 .tasks 文件中,任务名称和您刚刚构建的 DLL 的路径)

<UsingTask AssemblyFile="C:\customtasks\XamlTasks.dll"
TaskName="Rob.CustomTasks.Xaml.CleanXaml"/>

这使您能够像调用任何其他 MsBuild 任务一样调用它

<CleanXaml Source="$(PathtoOriginalXaml)" 
Destination="$(SourceCodePath)\$(cleanXaml.xaml)" />

从那里您需要找出将其“注入(inject)”到您的构建过程中的最佳方法。根据您构建的方式(msbuild、vs2010、teambuild 或 teambuild 工作流),可以使用不同的方法来执行此操作。本质上,您需要在调用 CoreCompile 目标之前发生这种情况,并确保您的“输出 xaml”正确替换了 CSC.exe 所期望的内容。

搜索 MsBuild 任务以获取更多信息,或在此处提出任何问题。

我强烈推荐这种方法,而不是在 MSBuild 中使用 CallEXE 任务,b/c 这样 MSBuild 属性和项目将保留在上下文中,因此您只是从一个构建步骤移动到另一个构建步骤,而不是转移整个要做的事情转换,然后希望它继续工作。

关于wpf - 如何将 XAML 转换注入(inject)到我的构建中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4921629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com