2014-09-23 3 views
0

Предполагая, что у последней версии MSBuild есть три проекта ProjA, ProjB и ProjC. У меня есть пользовательская цель в A и B, которая копирует отдельные выходы (элементы бункера) в настраиваемый путь $(CustomOutputPath) - все это работает индивидуально. ProjC также имеет настраиваемую цель, но в дополнение к копированию своих файлов на $(CustomOutputPath), он также сначала очищает выходной путь, затем цепочки ProjA и ProjB, так что практически все 3 проекта имеют свои файлы в пользовательском пути вывода.Задача MSBuild не создает ссылки на проект

Предположим, что я не могу изменить это требование.

Моей ProjC цель выглядит примерно так:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <!-- Contains groups and properties only like 
     CustomOutputPath and BuildProjects --> 
    <Import Project="SharedGroups.msbuild"/> 

    <Target Name="AfterBuild"> 

     <!-- Removing old output --> 
     <RemoveDir Directories="$(CustomOutputPath)" /> 

     <ItemGroup> 
      <!-- Arbitrary contents of this project --> 
      <FilesToCopy Include="**\*.*" /> 
     </ItemGroup> 

     <!-- this works fine --> 
     <Copy SourceFiles="@(FilesToCopy)" 
       DestinationFolder="$(CustomOutputPath)" 
       OverwriteReadOnlyFiles="true" /> 

     <!-- Once cleanup and copy is completed, I want to run all the other 
      projects builds which contain similar but specific copy tasks as 
      above, with no clean up. BuildProjects is an ItemGroup of all 
      the projects I want to build --> 
     <MSBuild Projects="@(BuildProjects)" 
       Properties="Configuration=$(Configuration); BuildProjectReferences=true"/> 

    </Target> 

</Project> 

Проблема у меня в том, что один из проектов, я пытаюсь построить на последнем этапе происходит сбой, поскольку он ссылается на другой проект в решении , который не строится как часть директивы BuildProjectReferences=true, поэтому он не может найти DLL. Если я создам эту зависимость отдельно, задача MSBuild будет работать, но я не хочу, чтобы этот проект был создан независимо.

Почему мой проект, на который ссылается, не строится, и есть ли лучший способ сделать это с помощью MSBuild?

Примечание: я открыт для других решений. Я попытался сделать ProjA и ProjB ссылки ProjC (следовательно, не нужна задача MSBuild внизу цели ProjC), но затем шаг очистки на C происходит ПОСЛЕ A и B скопируйте их выход так, чтобы он не работал.

ответ

0

Использовать /verbosity:detailed и перенаправить вывод в файл. Посмотрите на словосочетание, чтобы узнать, что происходит с целью ResolveProjectReferences. Вы также можете использовать /verbosity:diag и посмотреть подробности о том, почему пропущенные вещи и т. Д. Это может быть полезно, так как Условие для различных задач, используемых там, довольно волосатое.

Смежные вопросы