2010-03-23 3 views
1

Salut, j'ai un projet studio visuel qui comprend postbuildevents sous la forme suivante:Comment intégrer une logique conditionnelle dans les événements Postbuild

MyTool.exe $ (ProjectDir) somesrcfile.txt $ (TargetDir) sometargetfile.bin

Maintenant, je veux ajouter une logique disant que ces étapes ont lieu seulement si les fichiers ont changé. En peudocode:

si (somesrcfile.txt est plus récent que sometargetfile.bin) { MyTool.exe $ (ProjectDir) somesrcfile.txt $ (TargetDir) sometargetfile.bin }

Puis-je faire avec MsBuild? J'ai juste essayé avec une commande de copie simple mais il ne semble pas fonctionner. De plus, le message ne s'affiche pas lorsque je crée la solution.

<ItemGroup> 
    <MyTextFile Include="*.txt" /> 
    </ItemGroup> 

    <Target Name="Build" Inputs="@(MyTextFile)" Outputs="@(MyTextFile->'%(Filename).bin')"> 
     <CustomBuild> 
     <Message>Encoding files...</Message> 
     <Command> 
      copy %(Identity) %(Filename).bin 
     </Command> 
     <Outputs>$(OutDir)%(Identity)</Outputs> 
     </CustomBuild> 
    </Target> 

Répondre

4

Oui, il est possible en utilisant les attributs Inputs et Outputs sur votre cible.

Voir: How to: Build incrementally

Dans votre cas, il ressemblerait à quelque chose comme ceci:

<Target Name="AfterBuild" DependsOnTargets="Test"> 
    </Target> 

    <ItemGroup> 
    <MyTextFile Include="*.txt" /> 
    </ItemGroup> 

    <Target Name="Test" Inputs="@(MyTextFile)" Outputs="@(MyTextFile->'%(FileName).bin')"> 
    <Message Text="Copying @(MyTextFile)" Importance="high"/> 

    <Copy SourceFiles="@(MyTextFile)" DestinationFiles="@(MyTextFile->'%(FileName).bin')" /> 

    </Target> 

Cet objectif ne fonctionne si les fichiers d'entrée sont plus récents que les fichiers de sortie.

+0

Merci pour votre réponse! Je l'ai juste essayé avec une commande de copie simple mais cela ne semble pas fonctionner. De plus, le message ne s'affiche pas lorsque je crée la solution. Voir mes modifications. – codymanix

+0

Salut codymanix. S'il vous plaît voir mes modifications. Je viens de tester cet exemple avec MSBuild 3.5 et ça fonctionne comme un charme. Les fichiers texte sont uniquement copiés s'ils sont plus récents que les fichiers bin. –

+0

J'ai maintenant copié l'exemple que vous avez donné dans mon fichier csproj directement dans le nœud à la fin du fichier. Rien ne se passe. Le message n'est pas affiché. J'ai défini la sortie MSBuild dans Visual Studio sur "diagnostic", le nom de la cible n'apparaît pas ici. – codymanix

Questions connexes