我有一个tfs 2008版本,我需要添加WiX compliation。
目前,构建执行并编译并将所有输出复制到以下目标
中的drop位置<Target Name="AfterCompile"> .... </Target>
我在其下方添加了另一个目标,如下所示
<UsingTask TaskName="HeatDirectory" AssemblyFile="$(WixTasksPath)" />
<Target Name="BuildMsi" DependsOnTargets="AfterCompile">
<Message Text="Start harvesting Website files for Wix compliation" />
<HeatDirectory
ToolPath="$(WixToolPath)"
Directory="$(DropLocation)\Latest\x86\Release\_PublishedWebsites\IFMA.MasterPlan.Web"
GenerateGuidsNow="yes"
ComponentGroupName="Web"
OutputFile="$(MSBuildProjectDirectory)\Setup\Product\Fragments\wwwfiles.wxs"
SuppressFragments="yes"
DirectoryRefId="WebRoot"
KeepEmptyDirectories="yes"
PreprocessorVariable="var.WebRoot"
SuppressRegistry="yes"
SuppressRootDirectory="yes"
SuppressCom="yes"
/>
<Message Text="Finished harvesting Website files for Wix compliation" />
</Target>
永远不会执行BuildMsi目标,但绝对是AfterCompile目标。
BuildMsi未列在默认构建目标中 但我认为,因为它依赖于AfterCompile,它将在它之后执行。
我在这里缺少什么?
答案 0 :(得分:1)
DependsOnTargets列出了目标可以运行之前必须执行的目标,它不会强制目标在目标列表运行后运行。
请参阅:http://msdn.microsoft.com/en-us/library/t50z2hka(v=VS.90).aspx
如果您使用的是MSBuild 4.0,则需要AfterTargets属性:
AfterTargets:可选属性。
以分号分隔的目标列表 名。指定时,表示 这个目标应该在之后运行 指定的目标或目标。这个 让项目作者扩展 没有的现有目标集 直接修改它们。
或者,您可以使用目标注入,它基本上覆盖.proj文件中的CompileDependsOn属性,以在最后包含目标。您需要在导入公共目标文件后声明此属性,以确保它是属性的最后一个定义。
<PropertyGroup>
<CompileDependsOn>
$(CompileDependsOn);
MyCustomTarget
</CompileDependsOn>
</PropertyGroup>