如何在构建中注入XAML转换?

时间:2011-02-07 13:04:30

标签: wpf silverlight msbuild

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

我的问题是:运行此exe的最简单,最可靠的方法是什么?

我的第一个想法是进行预制活动。但这必须适用于原始的XAML文件。发展会变得非常痛苦。

当运行post build事件时,我的资源已经编译到dll中。

我有什么选择?

1 个答案:

答案 0 :(得分:2)

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

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

这样的东西
public class CleanXAML : Task 
{
}

然后你spefify(在你的构建文件,或你导入的外部.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属性和项目保持在上下文中,所以你只是从构建步骤转移到构建步骤,而不是侧面跟踪整个事情要做变换,然后希望它继续工作。