Пакетирование MSBuild работает не так, как я ожидал. Вот быстрый пример сценария MSBuild, который демонстрирует поведение «проблемы»:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<ItemGroup>
<Platform Condition="('$(Platform)' == 'All') Or ('$(Platform)' == 'x86')" Include="x86" />
<Platform Condition="('$(Platform)' == 'All') Or ('$(Platform)' == 'x64')" Include="x64" />
</ItemGroup>
<Target Name="Build">
<ItemGroup>
<OutputFiles Include="%(Platform.Identity)\*.txt"/>
</ItemGroup>
<Message Importance="high" Text="%(Platform.Identity): @(OutputFiles)" />
</Target>
</Project>
Я назвал этот скрипт 'test.proj' и поместил его в папку вместе с парой других подпапок / файлов:
.\x86\test-x86.txt
.\x64\test-x64.txt
Если я выполняю msbuild следующим образом msbuild .\test.proj /p:Platform=All
, вывод будет выглядеть так:
...
Build:
x86: x86\test-x86.txt;x64\test-x64.txt
x64: x86\test-x86.txt;x64\test-x64.txt
...
Я ожидал / надеюсь, что результат будет выглядеть следующим образом:
...
Build:
x86: x86\test-x86.txt
x64: x64\test-x64.txt
...
Другими словами, я хочу, чтобы элементы в группе элементов OutputFiles
были сгруппированы / отфильтрованы в соответствии с пакетной задачей Message
.
Как я могу изменить скрипт, чтобы получить поведение, которое я хочу? Я бы предпочел решение, которое не предусматривает жесткого кодирования значений «платформа» в области цели / задачи.