2010-06-18 9 views
0

Je développe une tâche MSBuild personnalisée en héritant de la classe Task de base. Ma tâche appelle la tâche de copie déclarée dans Microsoft.Build.Tasks.dll définissant la propriété DestinationFolder dans le processus. Ma tâche personnalisée a une propriété appelée DestinationFolder déclarée commeMSBuild get% (RecursiveDir) directive du paramètre de tâche personnalisée

public ITaskItem DestinationFolder { get; set; } 

Lorsque vous appelez cette tâche à partir d'un build/fichier de projet que je pourrais passer un paramètre tel que

<MyTask DestinationFolder="C:\Development\Test\%(RecursiveDir)" 

le problème que j'ai est que, lorsque cette tâche exécute, la propriété DestinationFolder semble ne pas avoir connaissance du bit %(RecursiveDir), semble plutôt être définie sur C:\Development\Test\Bin.

This question semble suggérer qu'il n'y a pas de solution à ce problème. Est-ce vraiment le cas? Je me demandais s'il est possible de déclarer la propriété comme une simple chaîne puis de créer un objet TaskItem à la volée et si la chaîne DestinationFolder contient l'instruction spéciale %(RecursiveDir) pour ensuite configurer l'objet TaskItem en conséquence.

Répondre

0

La question liée traite des paramètres de sortie d'une tâche, où celle-ci traite des entrées. Le problème ici est que vous avez déclaré DestinationFolder comme ITaskItem, mais que vous passez une chaîne. Vous n'avez pas donné assez d'exemple pour comprendre exactement ce que vous essayez de faire, mais en supposant que vous ayez un fichier appelé "C: \ Development \ Test \ Bin \ SomeFile.txt", vous pourrait définir un élément dans votre projet comme:

<ItemGroup> 
    <DestinationFolderArgument Include="C:\Development\Test\**\SomeFile.txt" /> 
</ItemGroup> 
<MyTask DestinationFolder="@(DestinationFolderArgument)" /> 

maintenant, votre tâche aura accès à toutes les métadonnées de l'élément, et RecursiveDir contiendra « Bin \ ».