我想针对我的 XAML 资源字典运行自定义 EXE。假设我得到的这个 exe 将删除注释、空格和未使用的资源。原始 XAML 文件需要保持不变,但最终出现在 XAP 和 DLL 中的 XAML (silverlight) 和 BAML (wpf) 需要进行转换。它需要在我的计算机和构建服务器上运行。
我的问题是:运行这个exe的最简单、最可靠的方法是什么?
我的第一个想法是举办一个预构建活动。但这必须适用于原始 XAML 文件。开发会变得相当痛苦。
当构建后事件运行时,我的资源已经编译到 dll 中。
我有什么选择?
您应该将“exe”实现为 MSbuild 任务。
本质上,您构建了一个继承自的 C# 类Microsoft.Build.Utilities.Task类,并重写 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)" />
从那里您需要找出将其“注入”到您的构建过程中的最佳方法。根据您的构建方式(msbuild、vs2010、teambuild 或 teambuild 工作流程),有不同的方法可以实现此目的。本质上,您需要在调用 CoreCompile 目标之前发生此操作,并确保您的“输出 xaml”正确替换 CSC.exe 所期望的内容。
在 MsBuild 任务上进行一些搜索以获取更多信息,或者在此处提出任何问题。
我强烈推荐这种方法,而不是在 MSBuild 中使用 CallEXE 任务,b/c 这样,MSBuild 属性和项目保留在上下文中,因此您只需从构建步骤移动到构建步骤,而不是转移整个事情来进行转换,然后希望它继续工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)