Я пытаюсь использовать MSBuild для чтения списка файлов из текстового файла, а затем выполнить рекурсивное копирование, копируя содержимое этих файлов каталогов в некоторую промежуточную область, , исключая определенные расширения (например, файлы .tmp)
Мне удалось довольно легко выполнить большинство вышеперечисленных задач с помощью CreateItem и задачи копирования MSBuild, что бы я ни делал, задача CreateItem просто игнорирует мой параметр Exclude:
<PropertyGroup>
<RootFolder>c:\temp</RootFolder>
<ExcludeFilter>*.tmp</ExcludeFilter>
<StagingDirectory>staging</StagingDirectory>
</PropertyGroup>
<ItemGroup>
<InputFile Include="MyFile.txt" />
</ItemGroup>
<Target Name="Build">
<ReadLinesFromFile File="@(InputFile)">
<Output ItemName="AllFolders" TaskParameter="Lines" />
</ReadLinesFromFile>
<CreateItem Include="$(RootFolder)\%(AllFolders.RelativeDir)**"
Exclude="$(ExcludeFilter)">
<Output ItemName="AllFiles" TaskParameter="Include" />
</CreateItem>
<Copy SourceFiles="@(AllFiles)"
DestinationFolder="$(StagingDirectory)\%(RecursiveDir)"
Пример содержимого файла 'MyFile.txt':
somedirectory\
someotherdirectory\
(т. Е. Пути относятся к $(RootFolder)
- упомяните об этом, потому что я где-то читал, что это может быть актуально)
Я пробовал множество различных комбинаций фильтров Exclude, но мне никогда не удавалось заставить его корректно исключать мои файлы .tmp - есть ли способ сделать это с MSBuild, не прибегая к xcopy?