在MSBuild中,您可以通过将项目组传递到目标来数据驱动目标依赖项,如下所示:
<ItemGroup>
<FullBuildDependsOn Include="Package;CoreFinalize"
Condition="@(FullBuildDependsOn) == ''" />
</ItemGroup>
<Target Name="FullBuild"
DependsOnTargets="@(FullBuildDependsOn)" />
如果不覆盖FullBuildDependsOn
项目组,则FullBuild目标默认为取决于Package和CoreFinalize目标。但是,您可以通过定义自己的FullBuildDependsOn项目组来覆盖它。
我想在psake中做同样的事情 - 例如:
properties {
$FullBuildDependsOn = "Package", "CoreFinalize"
}
task default -depends FullBuild
# this won't work because $FullBuildDependsOn hasn't been defined yet - the "Task" function will see this as a null depends array
task FullBuild -depends $FullBuildDependsOn
在psake中,我需要做些什么来驱动任务依赖?
答案 0 :(得分:2)
行。我明白你现在想要完成的事情。你可以通过常规的PowerShell-fu。
来做到这一点$FullBuildDependsOn = "Package"
Invoke-psake buildScript.ps1
在buildScript.ps1中:
if($FullBuildDependsOn -eq $Null) {
$FullBuildDependsOn = "Package", "CoreFinalize"
}
properties {
# Usual build properties here
}
task default -depends FullBuild
task FullBuild -depends $FullBuildDependsOn {}
task Package {}
task CoreFinalize {}
这里的关键是使用普通的PowerShell变量而不是使用psake属性。 HTH。
答案 1 :(得分:0)
这不是我们在实现psake时考虑过的用例。更改FullBuild的依赖项列表似乎有点奇怪,对我来说是不可维护的。您可以通过传递要从命令行运行的任务列表来完成相同的任务。
./invoke-psake buildScript.ps1 Package, CoreFinalize
或者我错过了什么?