2011-08-16 2 views
1

J'utilise SvnInfo task dans le script MSBuild:MSBuild SvnInfo - quelles entrées cibles sont correctes?

<SvnInfo LocalPath="$(Sources)"> 
    <Output TaskParameter="Revision" PropertyName="Revision" /> 
</SvnInfo> 

$(Sources) contient des fichiers source uniquement.

De toute évidence, SvnInfo dépend des fichiers $(Sources). Target utilise ensuite les informations pour générer le fichier de sortie avec le numéro de révision.

En fait, je veux exécuter SvnInfo lorsque le numéro de révision est modifié, mais pas pour exécuter Target (utiliser la construction incrémentielle) lorsque le numéro de révision est le même que le précédent. Comment spécifier correctement l'entrée dans la cible (attribut Inputs dans la balise Target, qui contient l'appel de SvnInfo tâche)?

je l'ai fait de la façon suivante:

<ItemGroup> 
    <Target1Inputs Include="$(Sources)\**" /> 
</ItemGroup> 

<Target Name="Target1" Inputs="@(Target1Inputs)" Outputs="..."> 
    ... 
    <!-- SvnInfo call here --> 
    <!-- File with revision number is created here --> 

</Target> 

Il me semble la solution de contournement, car idéalement je devrais savoir quels fichiers SvnInfo dépend sans deviner. Est-il possible d'obtenir de telles informations?

Je ne suis pas non plus au courant si les dossiers .svn sont modifiés ou non.

+0

Alors, vous demandez comment remplir "@ (Target1Inputs)" par des fichiers ou quelle entrée vous voulez dire? – sll

+0

@sllev Je demande ce qu'il faut spécifier dans l'attribut d'entrée de la balise Target. J'ai proposé ma variante, mais je ne suis pas sûr. (Question mise à jour) – sergtk

+0

Voir ma réponse, si vous voulez dire quelque chose d'autre s'il vous plaît laissez-moi savoir – sll

Répondre

0

Au fond de cette façon:

<PropertyGroup> 
    <ExcludePdbs>$(YourOutputPath)\**\*.pdb</ExcludePdbs> 
    <ExcludeTmp>$(YourOutputPath)\**\*tmp*</ExcludeTmp> 
</PropertyGroup> 

<!-- Prepare set of files --> 
<ItemGroup> 
    <Files Include="$(FilesToIncludeFolder)\**\*.*" 
      Exclude="$(ExcludePdbs);$(ExcludeTmp);$(ExcludeOtherFiles);"/> 
</ItemGroup> 

<!-- Pass into the target --> 
<Target Name="Target1" Inputs="@(Files)" Outputs="..." /> 

EDIT: La question a été mise à jour alors voici ma mise à jour aussi bien

Supposant que vous pouvez gérer l'état a changé la révision, vous pouvez ajouter Condition à un Target et exécutez-le dépend de la propriété $(RevisionWasChanged).

<Target Condition="$(RevisionWasChanged)=='True'"` /> 

pour contrôler également l'exécution du script de compilation de flux, vous pouvez utiliser la fonction <Choose>:

<Choose> 
    <When Condition="$(RevisionWasChanged)=='True'"> 
    </When> 
    <Otherwise> 
    </Otherwise> 
</Choose> 

Permettez-moi de savoir si cela fonctionne pour vous.

+0

Lors de l'exécution de ma tâche avec des entrées incorrectes, les sources pourraient être mises à jour, mais en raison de la construction incrémentale cible n'est pas exécutée. En fait, je veux lancer SvnInfo quand le numéro de révision est changé, mais ne pas exécuter Target (utiliser la construction incrémentielle) quand le numéro de révision est le même. Dans l'attribut Inclure j'ai spécifié le dossier avec des sources seulement. – sergtk

+1

@sergdev: vous devez ajouter ces détails à la réponse car ils sont importants – sll

+0

En fait, la façon simple de calculer '$ (RevisionWasChanged)' est l'une des réponses possibles à ma question. – sergtk

Questions connexes