Определение выходных данных 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, и, следовательно,ProjectRefences содержат относительные пути и т. д. Я видел упоминание о том, что это может вызывать проблемы - но без полного объяснения, почему, когда это будет исправлено или как обойти это. Другими словами, мне не очень интересно, например, преобразованиеProjectReference пути к абсолютным путям путем ручного редактирования .csproj.

Хотя вполне возможно, что я делаю что-то глупое, и кто-то сразу укажет, что это такое (что было бы здорово), будьте уверены, я потратил много времени на изучение/v:diag выходы и т. д. (хотя я не пытался создать репродукцию с нуля - это в контексте относительно сложной общей сборки)

Ответы на вопрос(4)

Ваш ответ на вопрос