Получить файлы XML-документации из сценария TFS Team Build
У меня есть настройка схемы репликации зависимостей в нашей среде TFS, основанная на http://geekswithblogs.net/jakob/archive/2009/03/05/implementing-dependency-replication-with-tfs-team-build.aspx.
Это использует CompilationOutputs
группа элементов, чтобы получить встроенные файлы DLL и объединить / объединить их в зависимые проекты. Моя проблема в том, что CompilationOutputs
Группа элементов содержит только библиотеки DLL, и я хотел бы также включить файлы документации XML, чтобы при использовании этих библиотек я мог получить советы по документированию intellisense. Есть ли другая группа товаров, которая содержит их, или другой подход? Нужно ли вручную находить XML-файлы и добавлять их в группу товаров?
Сейчас мы находимся на TFS 2010, поэтому, если есть что-то новое, мы можем попытаться воспользоваться этим (хотя было бы неплохо, если бы мне не пришлось преобразовывать всю эту схему для использования процесса Workflow...)
1 ответ
Согласно статье вы копируете и проверяете результаты:
<Copy SourceFiles="@(CompilationOutputs)" DestinationFolder="$(ReplicateSourceFolder)"/>
<Exec Command="$(TF) checkin /comment:"Checking in file from build" "$(ReplicateSourceFolder)" /recursive"/>
Не могли бы вы добавить вторую строку копирования перед регистрацией, чтобы скопировать XML-файлы с использованием метаданных?
<Copy SourceFiles="%(CompilationOutputs.RootDir)%(CompilationOutputs.Directory)\%(CompilationOutputs.Filename).xml" DestinationFolder="$(ReplicateSourceFolder)"/>
Вот еще один вариант, использующий встроенную задачу, которая создает другую группу элементов, изменяя расширение таким образом, что он добавляет только файлы документов, которые действительно существуют:
<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>