2010-04-03 20 views
0

En MSBuild vous pouvez données conduire les dépendances cibles en passant un groupe d'articles dans une cible, comme suit:Comment les données gèrent-elles les dépendances de tâches via les propriétés de psake?

<ItemGroup> 
    <FullBuildDependsOn Include="Package;CoreFinalize" 
         Condition="@(FullBuildDependsOn) == ''" /> 
</ItemGroup> 

<Target Name="FullBuild" 
     DependsOnTargets="@(FullBuildDependsOn)" /> 

Si vous ne l'emporte pas sur le groupe d'éléments FullBuildDependsOn, les valeurs par défaut cibles FullBuild à en fonction du forfait et CoreFinalize cibles. Toutefois, vous pouvez le remplacer en définissant votre propre groupe d'éléments FullBuildDependsOn.

Je voudrais faire la même chose dans psake - par exemple:

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 

Que dois-je faire pour les données conduisent les dépendances de tâches dans psake?

Répondre

2

OK. Je comprends ce que vous essayez d'accomplir maintenant. Vous pouvez le faire grâce à PowerShell-fu régulier.

$FullBuildDependsOn = "Package" 
Invoke-psake buildScript.ps1 

En 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 {} 

La clé ici est d'utiliser une variable PowerShell normale plutôt que d'utiliser une propriété psake. HTH.

+0

Oui, j'ai pensé que je pouvais le faire. Je me demandais juste s'il y avait un moyen de le supporter à travers le système de propriété psake que je ne voyais pas. Merci! – Jordan

0

Ce n'est pas un cas d'utilisation que nous avons envisagé lors de l'implémentation de psake. Changer la liste des dépendances de FullBuild me semble un peu étrange et impossible à maintenir. Vous pouvez accomplir la même chose en transmettant une liste de tâches à exécuter depuis la ligne de commande.

./invoke-psake buildScript.ps1 Package, CoreFinalize 

Ai-je oublié quelque chose?

+0

Je savais que vous pouviez le faire. Je voudrais générer des dépendances de tâches par propriétés. De cette façon, je peux avoir un ensemble standard de dépendances entre les tâches et ensuite pouvoir les remplacer au besoin. Je construis un script de build réutilisable, et j'essaye de suivre l'approche de la convention-over-configuration, mais je veux toujours activer les options de configuration. – Jordan