В MSBuild 3.5 возможно ли изменить элементы заказа в ItemGroup?
Пример
У меня есть 2 проекта.Один может быть построен независимо, другой зависит от первого.Каждый проект ссылается на свои конкретные элементы в файле .targets.
project_A.targets
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<AssembliesToRemove Include="@(AssembliesToRemove)" />
<AssembliesToRemove Include="Assembly_A.dll">
<ApplicationName>App_A</ApplicationName>
</AssembliesToRemove>
</ItemGroup>
<ItemGroup>
<AssembliesToDeploy Include="@(AssembliesToDeploy)" />
<AssembliesToDeploy Include="Assembly_A.dll">
<AssemblyType>SomeType</AssemblyType>
<ApplicationName>App_A</ApplicationName>
</AssembliesToDeploy>
</ItemGroup>
</Project>
project_B.targets
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<AssembliesToRemove Include="@(AssembliesToRemove)" />
<AssembliesToRemove Include="Assembly_B.dll">
<ApplicationName>App_B</ApplicationName>
</AssembliesToRemove>
</ItemGroup>
<ItemGroup>
<AssembliesToDeploy Include="@(AssembliesToDeploy)" />
<AssembliesToDeploy Include="Assembly_B.dll">
<AssemblyType>SomeType</AssemblyType>
<ApplicationName>App_B</ApplicationName>
</AssembliesToDeploy>
</ItemGroup>
</Project>
project_A.proj
<Project DefaultTargets="Start" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="project_A.targets" />
<Import Project="Common.targets" />
</Project>
project_B.proj
<Project DefaultTargets="Start" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="project_A.targets" />
<Import Project="project_B.targets" />
<Import Project="Common.targets" />
</Project>
Проблема
В этом сценарии проблема возникает во время обработки Задачи @(AssembliesToDeploy)
, так как Assembly_B.dll необходимо развернуть до Assembly_A.dll.
Обработка @(AssembliesToRemove)
работает нормально, потому что здесь сборки находятся справапорядок (удалите Assembly_A.dll перед Assembly_B.dll).
То, что я пытался сделать
Я пытался повлиять на порядок @(AssembliesToDeploy)
, изменивproject_B.targets примерно так:
<ItemGroup>
<AssembliesToDeploy Include="Assembly_B.dll">
<AssemblyType>SomeType</AssemblyType>
<ApplicationName>App_B</ApplicationName>
</AssembliesToDeploy>
<AssembliesToDeploy Include="@(AssembliesToDeploy)" />
</ItemGroup>
, но при использовании project_B.targets внутри project_B.proj порядок внутри @(AssembliesToDeploy)
все еще остается Assembly_A.dll; Assembly_B.dll.
Редактировать
Как указывает MadGnome, это не сработает, потому что я получу дубликаты в @(AssembliesToDeploy)
Есть ли решение, которое позволило бы повторно использовать мои .targets, т.е. не копировать все элементы ItemGroup во все файлы .targets?