Как создать копируемые элементы из значений свойств? - PullRequest
0 голосов
/ 18 мая 2010

Допустим, у меня есть список подпутей, таких как

 <PropertyGroup>
   <subPaths>$(path1)\**\*; $(path2)\**\*; $(path3)\file3.txt; </subPaths>
</PropertyGroup>

Я хочу скопировать эти файлы из папки A в папку B (конечно, у нас уже есть все подпапки / файлы в A). Я попробовал:

<Target Name="Replace" DependsOnTargets="Replace_Init; Replace_Copy1Path">
</Target>

<Target Name="Replace_Init">
  <PropertyGroup>
    <subPaths>$(path1)\**\*; $(path2)\**\*; $(path3)\file3.txt; </subPaths>
  </PropertyGroup>
  <ItemGroup>
    <subPathItems Include="$(subPathFiles.Split(';'))" />
  </ItemGroup>
</Target>

<Target Name="Replace_Copy1Path" Outputs="%(subPathItems.Identity)">
  <PropertyGroup>
    <src>$(folderA)\%(subPathItems.Identity)</src>
    <dest>$(folderB)\%(subPathItems.Identity)</dest>
  </PropertyGroup>
  <Copy SourceFiles="$(src)" DestinationFiles="$(dest)" />
</Target>

Но задача «Копировать» не сработала. Он не переводит **\* в файлы. Что я сделал не так? Пожалуйста, помогите!

1 Ответ

2 голосов
/ 18 мая 2010

Я не думаю, что вы можете сделать что-то подобное.

$(subPathFiles.Split(';')) возвращает свойство, в котором значения разделяются точкой с запятой, поэтому этот вызов бесполезен.

Если вы хотитеЧтобы сохранить этот механизм, вы должны использовать задачу StringToItemCol из MSBuild Extension Pack :

<Target Name="Replace_Init">
  <PropertyGroup>
    <subPaths>$(path1)\**\*; $(path2)\**\*; $(path3)\file3.txt; </subPaths>
  </PropertyGroup>

  <MsBuildHelper TaskAction="StringToItemCol" 
                 ItemString="$(subPaths)" Separator=";">
    <Output TaskParameter="OutputItems" ItemName="subPathItems "/>
  </MsBuildHelper>
</Target>

В противном случае вы можете напрямую передавать элементы со встроенными папками A и subPath:

<ItemGroup>
  <subPathIt Include="$(folderA)\$(path1)\**\*"/>
  <subPathIt Include="$(folderA)\$(path2)\**\*"/>
  <subPathIt Include="$(folderA)\$(path3)\file3.txt" Condition="Exists('$(path3)\file3.txt')"/>
</ItemGroup>


<Target Name="Replace_Copy1Path">
  <Copy SourceFiles="@(subPathItems )" 
        DestinationFiles="$(folderB)\%(RecursiveDir)\%(Filename)%(Extension)" />
</Target>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...