2010-12-14 81 views
0

J'ai une configuration de schéma de réplication de dépendances dans notre environnement TFS basé sur http://geekswithblogs.net/jakob/archive/2009/03/05/implementing-dependency-replication-with-tfs-team-build.aspx.Récupère les fichiers de documentation XML à partir du script TFS Team Build

Ceci utilise le groupe d'articles CompilationOutputs pour obtenir les fichiers DLL construits et les fusionner/fusionner dans des projets dépendants. Mon problème est que le groupe d'articles CompilationOutputs ne contient que les DLL, et je voudrais également inclure les fichiers de documentation XML, donc je peux obtenir des astuces de documentation intellisense lors de l'utilisation de ces bibliothèques. Existe-t-il un groupe d'articles différent contenant ces éléments ou une approche différente? Ai-je besoin de rechercher manuellement les fichiers XML et de les ajouter à un groupe d'articles? Nous sommes sur TFS 2010 maintenant, donc s'il y a quelque chose de nouveau, nous pouvons essayer d'en profiter (bien que ce serait bien si je n'avais pas besoin de convertir tout ce schéma pour utiliser un processus de Workflow) ...)

Répondre

1

Selon l'article que vous copiez et checkin les sorties:

<Copy SourceFiles="@(CompilationOutputs)" DestinationFolder="$(ReplicateSourceFolder)"/> 
<Exec Command="$(TF) checkin /comment:&quot;Checking in file from build&quot; &quot;$(ReplicateSourceFolder)&quot; /recursive"/> 

Pourriez-vous pas ajouter une deuxième ligne de copie avant le checkin pour copier les fichiers XML en utilisant les métadonnées?

<Copy SourceFiles="%(CompilationOutputs.RootDir)%(CompilationOutputs.Directory)\%(CompilationOutputs.Filename).xml" DestinationFolder="$(ReplicateSourceFolder)"/> 

Voici une autre option à l'aide d'une tâche en ligne qui construit un autre groupe d'élément changeant l'extension afin qu'il ajoute uniquement les fichiers doc qui existent réellement:

<Target Name="Test"> 

    <ChangeExtension InputFiles="@(CompilationOutputs)" Extension=".xml"> 
     <Output TaskParameter="OutputFiles" ItemName="DocFiles" /> 
    </ChangeExtension> 

    <Copy SourceFiles="@(CompilationOutputs)" DestinationFolder="$(ReplicateSourceFolder)"/> 
    <Copy SourceFiles="@(DocFiles)" DestinationFolder="$(ReplicateSourceFolder)"/> 
    </Target> 

    <UsingTask TaskName="ChangeExtension" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"> 
    <ParameterGroup> 
     <InputFiles ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true"/> 
     <Extension ParameterType="System.String" Required="true"/> 
     <OutputFiles ParameterType="Microsoft.Build.Framework.ITaskItem[]" Output="true"/> 
    </ParameterGroup> 
    <Task> 
     <Code Type="Fragment" Language="cs"> 
     <![CDATA[ 
     if (InputFiles.Length > 0) 
     { 
     List<TaskItem> results = new List<TaskItem>(); 
     for (int i = 0; i < InputFiles.Length; i++) 
     { 
      ITaskItem item = InputFiles[i]; 
      string path = item.GetMetadata("FullPath"); 
      string docfile = Path.ChangeExtension(path, Extension); 
      if (File.Exists(docfile)) 
      { 
      results.Add(new TaskItem(docfile)); 
      } 
     } 
     OutputFiles = results.ToArray(); 
     } 
     ]]> 
     </Code> 
    </Task> 
    </UsingTask> 
+0

Cela ressemble à ça devrait fonctionner (Je ne t avoir des fichiers XML générés pour tous les projets, donc j'utilise la deuxième approche). Cependant, il semble que le workflow UpgradeTemplate.xaml utilisé par Team Build 2010 pour exécuter la construction l'exécute comme MSBuild 3.5, car j'obtiens l'erreur MSB4067: L'élément '' sous l'élément '' est méconnu." – bdukes

+0

Cela dit, j'ai trouvé ce qui suit dans le journal, qui ressemble à l'appel de la version 4.0: 'C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ MSBuild.exe/nologo/noconsolelogger" C: \ Builds \ 1 \ projet \ build \ BuildType \ TFSBuild.proj "/ m: 1" @C: \ Builds \ 1 \ projet \ build \ BuildType \ TfsBuild.rsp "' – bdukes

+0

A quoi sert l'attribut ToolsVersion dans votre fichier TFSBuild.proj . Si elle est définie sur 3.5, je vois le même problème. Le réglage à 4.0 l'a dépassé. L'autre option consiste à créer la tâche personnalisée en tant qu'assemblage distinct et à l'inclure de cette manière. –