Как получить @ (TargetOutputs) без выполнения сборки - PullRequest
5 голосов
/ 19 октября 2011

Я внедряю среду MSBuild для управления созданием и развертыванием многих проектов, организованных в виде иерархии.

<Target Name="_CoreBuild">
  <MSBuild Projects="@(Project)" Targets="Build" Properties="Configuration=$(Configuration)">
    <Output TaskParameter="TargetOutputs" ItemName="CompiledAssemblies" />
  </MSBuild>
</Target>

Чтобы реализовать правильную логику Clean / Clobber, я хотел бы получить список файлов, которые были бы скомпилированы, если бы выполнялась сборка с текущими параметрами.

<Target Name="_CoreClobber" DependsOnTargets="_CoreClean">
   <!-- How to retrieve @(CompiledAssemblies) as if we were
        building @(Project) and retrieving the @(TargetOutputs) item group.
     -->
</Target>

Я пробовал различные методы, в том числе создание пользовательской задачи, в которой я строю файл пользовательского проекта, который импортирует исходный проект, из которого я хочу получить свойства / элементы. Но это не дает мне надежных значений.

Есть ли способ получить группу элементов TargetOutputs проекта MSBuild без фактического выполнения сборки?

1 Ответ

6 голосов
/ 20 октября 2011

Неважно.

Я наткнулся на следующий похожий вопрос и решил, что мне нужно использовать цель GetTargetPath, например:

<Target Name="_CoreBuild">
  <MSBuild Projects="@(Project)" Targets="GetTargetPath" Properties="Configuration=$(Configuration)">
    <Output TaskParameter="TargetOutputs" ItemName="CompiledAssemblies" />
  </MSBuild>
</Target>
...