你如何通过psake中的属性来驱动任务依赖?

时间:2010-04-03 01:09:35

标签: psake

在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中,我需要做些什么来驱动任务依赖?

2 个答案:

答案 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

或者我错过了什么?