从TFS Team Build脚本获取XML文档文件

时间:2010-12-14 15:20:54

标签: tfs msbuild team-build xml-documentation

我在基于http://geekswithblogs.net/jakob/archive/2009/03/05/implementing-dependency-replication-with-tfs-team-build.aspx的TFS环境中设置了依赖项复制方案。

这使用CompilationOutputs项组来获取构建的DLL文件,并将它们分支/合并到依赖项目中。我的问题是CompilationOutputs项组只包含DLL,我还想包含XML文档文件,因此我可以在使用这些库时获得intellisense文档提示。是否有不同的项目组包含这些或不同的方法?我是否需要手动查找xml文件并将其添加到项目组?

我们现在正在使用TFS 2010,所以如果有新的东西,我们可以尝试利用它(尽管如果我不必将整个方案转换为使用工作流程,那就太好了。 ..)

1 个答案:

答案 0 :(得分:1)

根据您复制并检查输出的文章:

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

您无法在签入之前添加第二个副本行以使用元数据复制xml文件吗?

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

这是使用内联任务的另一个选项,该任务构建另一个项目组来更改扩展名,以便它只添加实际存在的doc文件:

 <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>