Определение выходных данных ProjectReference в MSBuild без запуска избыточных перестроений
Как часть решения, содержащего много проектов, у меня есть проект, который ссылается (через<ProjectReference>
три других проекта в решении, плюс некоторые другие). вAfterBuild
Мне нужно скопировать выходные данные 3 конкретных зависимых проектов в другое место.
Посредством различных ответов SO и т. Д. Я решил, что для достижения этой цели было:
<MSBuild
Projects="@(ProjectReference)"
Targets="Build"
BuildInParallel="true"
Condition="'%(Name)'=='ProjectA' OR '%(Name)'=='ProjectB' OR '%(Name)'=='ProjectC'">
<Output TaskParameter="TargetOutputs" ItemName="DependentAssemblies" />
</MSBuild>
<Copy SourceFiles="@(DependentAssemblies)" DestinationFolder="XX" SkipUnchangedFiles="true" />
Однако у меня возникли проблемы с этим.<MSBuild
СТЭПIncrementalClean
задача заканчивается удалением ряда выходовProjectC
, При запуске этого под VS2008,build.force
файл хранится вobj/Debug
папка ProjectC, которая затем запускает восстановление ProjectC, если я делаю Build для всего решения, если проект, содержащий этоAfterBuild
цель, тогда как если исключить этот проект из сборки, он [правильно] не вызовет перестроение ProjectC (икритически перестройка всех иждивенцев ProjectC). В этом случае это может быть хитрость, специфичная для VS, которая не возникает в контексте вызова TeamBuild или другого вызова MSBuild из командной строки (но наиболее распространенное использование будет через VS, поэтому мне нужно решить эту проблему в любом случае)
Зависимые проекты (и остальная часть решения в целом) были созданы в интерактивном режиме с VS, и, следовательно,ProjectRefence
s содержат относительные пути и т. д. Я видел упоминание о том, что это может вызывать проблемы - но без полного объяснения, почему, когда это будет исправлено или как обойти это. Другими словами, мне не очень интересно, например, преобразованиеProjectReference
пути к абсолютным путям путем ручного редактирования .csproj.
Хотя вполне возможно, что я делаю что-то глупое, и кто-то сразу укажет, что это такое (что было бы здорово), будьте уверены, я потратил много времени на изучение/v:diag
выходы и т. д. (хотя я не пытался создать репродукцию с нуля - это в контексте относительно сложной общей сборки)