2011-02-07 41 views
2

我想针对我的XAML资源字典运行自定义EXE。我们说这个exe文件将会删除评论,空白和未使用的资源。原始的XAML文件需要保持原样,但XAPL和DLL中的XAML(silverlight)和BAML(wpf)需要进行转换。它需要在我的电脑和构建服务器上工作。如何将XAML转换注入到我的构建中?

我的问题是:什么是最简单和最可靠的方式来运行此exe文件?

我的第一个想法是有一个预先构建的事件。但是这将不得不在原始的XAML文件上工作。发展会变得非常痛苦。

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

我有什么选择?

+0

如果不是WPF的专家,但不能使用XamlReader.Load()吗?谷歌那。 – 2011-02-07 13:18:41

+0

我认为这个问题更多地是关于如何将转换代码作为MSBuild的一部分来调用,而不是如何实现转换本身。 – 2011-02-07 13:40:51

回答

2

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

本质上,您构建一个C#类,该类继承自Microsoft.Build.Utilities.Task类,并覆盖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)" /> 

从那里,你需要ŧ o找出将这个“注入”到构建过程中的最佳方法。根据你的构建方式(msbuild,vs2010,teambuild或teambuild工作流程),有不同的方法可以做到这一点。基本上,您需要在调用CoreCompile目标之前进行此操作,并确保您的“输出xaml”正确替换了CSC.exe所期望的内容。

在MsBuild任务上进行一些搜索以获取更多信息,或者询问您在此处获得的任何问题。

我强烈推荐这种方法与在MSBuild中使用CallEXE任务相比,b/c这样MSBuild属性和项目保持在上下文中,因此您只需从构建步骤移动到构建步骤,与侧面追踪整个事物做转变,然后希望它继续工作。