0

在 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 中的任务依赖关系?

4

2 回答 2

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。

于 2010-04-05T18:57:43.900 回答
0

这不是我们在实现 psake 时曾经考虑过的用例。更改 FullBuild 的依赖项列表对我来说似乎有点奇怪且无法维护。您可以通过传入要从命令行运行的任务列表来完成相同的操作。

./invoke-psake buildScript.ps1 Package, CoreFinalize

还是我错过了什么?

于 2010-04-04T02:51:18.633 回答