В качестве части решения, содержащего много проектов, у меня есть проект, который ссылается (черезтри других проекта в решении, а также некоторые другие). В AfterBuild
мне нужно скопировать выходы трех конкретных зависимых проектов в другое место.Определение выходов ProjectReference в MSBuild без запуска избыточных перестроек
Через различные 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
депонируется в папке Project12, созданной ProjectC, которая затем запускает восстановление ProjectC, если я создаю сборку на всем решении, если проект содержит эту цель AfterBuild
, тогда как если исключить этот проект из сборки, он [правильно] не вызывает восстановление ProjectC (и критически восстановление всех иждивенцев ProjectC). В этом случае это может быть обман VS-спецификой, который не будет возникать в контексте вызова TeamBuild или другого командного вызова MSBuild (но наиболее частое использование будет выполняться через VS, поэтому мне необходимо разрешить это в любом случае)
Зависимая проекты (и остальная часть решения в целом) были созданы в интерактивном режиме с VS, и, следовательно, ProjectRefence
s содержат относительные пути и т. д. Я видел упоминание об этом, которое может вызвать проблемы, но без полного объяснения причин, или когда он будет исправлен или как его обойти. Другими словами, меня действительно не интересуют, например, конвертируя пути ProjectReference
в абсолютные пути, вручную редактируя .csproj.
Возможно, я делаю что-то глупое, и кто-то сразу укажет, что это такое (что было бы замечательно), будьте уверены, я потратил много времени на то, чтобы посмотреть /v:diag
выходов и т. Д. (Хотя я и не пытался построить репро с нуля - это в контексте относительно сложной общей сборки)
Во-первых, спасибо/поздравляю вас в выборе этой головоломки как вашего первого SO! Я лично сдержанно представлял бы зависимость от внутренних компонентов MSBuild такого характера, но да, это, конечно же, позволило бы мне «программно писать» файлы ». Есть несколько других «вычислить результаты» здесь, на SO, чтобы это могло поместиться лучше в качестве ответа. Основная проблема здесь для меня заключается в том, что бит '