Можно преобразовать список вещей, разделенных точкой с запятой, в элемент, что сделало бы это возможным, за исключением того, что элементы в вашем свойстве содержат символы подстановки, поэтому, если вы хотите, чтобы MSBuild рассматривал их как элементы в списке, по адресув тот момент, когда MSBuild впервые увидит его, путь должен быть действительным.Может быть, есть способ сделать это, но я не могу придумать один.Другими словами ...
<ItemGroup>
<TestFiles Include="$(TestFiles)" />
</ItemGroup>
... работает только в том случае, если $ (TestFiles) содержит разделенный список либо вещей без подстановочных знаков, либо определенных путей, которые действительно существуют.
ДалееMSBuild не может составить путь с подстановочным знаком внутри атрибута Include и одновременно оценить его, поэтому вам понадобится хитрость, чтобы сначала составить полный путь отдельно, а затем передать его в атрибут Include.Следующее будет работать, но оно требует изменения вашего свойства с разделителями в набор элементов.Он группирует зависимую цель в этом списке элементов, при этом каждое выполнение пакетной цели вычисляет мета-значение для одного элемента, которое сохраняется в новом мета-значении.Когда исходная цель выполняется, она может использовать это мета-значение в последующем включении.
<PropertyGroup>
<TestFilesWithFolder>
D:\Code\Test1.*;
D:\Code\Test2.*
</TestFilesWithFolder>
<TestFileRoot>D:\Code</TestFileRoot>
</PropertyGroup>
<ItemGroup>
<TestFilePattern Include="TestFilePattern">
<Pattern>Test1.*</Pattern>
</TestFilePattern>
<TestFilePattern Include="TestFilePattern">
<Pattern>Test2.*</Pattern>
</TestFilePattern>
</ItemGroup>
<Target Name="Compose" Outputs="%(TestFilePattern.Pattern)">
<ItemGroup>
<TestFilePattern Include="TestFilePattern">
<ComposedPath>@(TestFilePattern->'$(TestFileRoot)\%(Pattern)')</ComposedPath>
</TestFilePattern>
</ItemGroup>
</Target>
<Target Name="Build" DependsOnTargets="Compose">
<ItemGroup>
<TestFilesGroupWithFolder Include="$(TestFilesWithFolder)" />
</ItemGroup>
<Warning Text="Source files with folder: @(TestFilesGroupWithFolder)" />
<ItemGroup>
<ComposedTestFiles Include="%(TestFilePattern.ComposedPath)" />
</ItemGroup>
<Warning Text="Source files: @(ComposedTestFiles)" />
</Target>
, которое выдает следующий вывод:
(Build target) ->
d:\Code\My.proj(80,5): warning : Source files with folder:
D:\Code\Test1.txt;D:\Code\Test2.txt
d:\Code\My.proj(84,5): warning : Source files:
D:\Code\Test1.txt;D:\Code\Test2.txt