Предполагая, что у последней версии 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 скопируйте их выход так, чтобы он не работал.