Как часть решения, содержащего много проектов, у меня есть проект, который ссылается (через <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
содержат относительные пути и т. Д. Я видел упоминание о том, что это может вызвать проблемы - но без полного объяснения, почему, или когда это будет исправлено, или как обойти это. Другими словами, мне не очень интересно, например, преобразование путей ProjectReference
в абсолютные путем ручного редактирования .csproj.
Хотя вполне возможно, что я делаю что-то глупое, и кто-то сразу же укажет, что это такое (что было бы здорово), будьте уверены, я потратил много времени, изучая /v:diag
выходы и т. Д. (Хотя я не знаю попытался создать репродукцию с нуля - это в контексте относительно сложной общей сборки)