2008-10-09 9 views
0

J'ai un simple convertisseur Word en PDF comme tâche MSBuild. La tâche prend les fichiers Word (ITaskItems) en entrée et les fichiers PDF (ITaskItems) en sortie. Le script utilise une cible de transformation pour la conversion:MSBUILD Tâche Éléments dans les sous-répertoires: les constructions incrémentielles ne sont-elles pas possibles sur ces sous-répertoires?

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5"> 
    <UsingTask AssemblyFile="$(MSBuildExtensionsPath)\MyTasks.dll" TaskName="MyTasks.DocToPdf" /> 
    <Target Name="Build" DependsOnTargets="Convert" /> 
    <Target Name="Convert" 
      Inputs="@(WordDocuments)" 
      Outputs="@(WordDocuments->'%(FileName).pdf')"> 
    <DocToPdf Inputs="@(WordDocuments)" 
       Outputs="%(FileName).pdf"> 
     <Output TaskParameter="ConvertedFiles" ItemName="PdfDocuments" /> 
    </DocToPdf> 
    </Target> 
    <ItemGroup> 
    <WordDocuments Include="One.doc" /> 
    <WordDocuments Include="SubDir\Two.doc" /> 

    <WordDocuments Include="**\*.doc" /> 
    </ItemGroup> 
</Project> 

Ce qui se passe est que SubDir \ Two.doc est converti sur chaque génération incrémentielle, One.doc ne pas (c.-à-MSBuild saute correctement ce fichier parce qu'il était déjà converti) . Si j'utilise la spécification des éléments récursifs (la troisième ci-dessus), j'ai le même comportement (ie One.doc n'est converti que si le PDF est obsolète ou manquant, mais tous les documents des sous-répertoires sont toujours convertis).

Qu'est-ce que je fais mal ici?

Répondre

1

J'ai trouvé le problème. Il s'est avéré que j'avais une certaine logique dans la tâche qui transformerait tout chemin relatif spécifié pour un fichier PDF en un chemin absolu. Une fois que j'ai enlevé cela et changé le script à ceci:

<Target Name="Convert" 
      Inputs="@(WordDocuments)" 
      Outputs="@(WordDocuments->'%(RelativeDir)%(FileName).pdf')"> 
    <DocToPdf Inputs="%(WordDocuments.Identity)" 
       Outputs="%(RelativeDir)%(FileName).pdf"> 
     <Output TaskParameter="ConvertedFiles" ItemName="PdfDocuments" /> 
    </DocToPdf> 
    </Target> 

J'ai eu le comportement que je m'attendais.

0

Voici mon exemple d'une tâche qui effectue incrémentale builds sur les articles trouvés récursive dans les sous-répertoires:

<Target Name="Build" Inputs="@(RequestTextFiles)" Outputs="@(RequestTextFiles -> '%(Rootdir)%(Directory)%(Filename).out')"> 

    <DoSomething SourceFiles="@(RequestTextFiles)" /> 

    </Target> 

Mappe 1: 1 avec un fichier d'entrée, et un fichier de sortie avec le même nom, qui délivre à le même chemin avec une extension différente, à savoir 'out' dans ce cas.

Questions connexes