2014-08-20 6 views
1

Я не могу скопировать вложенные папки и файлы с помощью этого кода:Копирование вложенных папок и файлов в MSBuild

<ItemGroup> 
<Compile Include="C:\Test\Folder1\text.txt"/> 
<Compile Include="C:\Test\text1.txt"/> 
</ItemGroup> 
    <Copy SourceFiles="@(Compile)" DestinationFiles="@(Compile->'C:\Destination\%(RecursiveDir)%(Filename)%(Extension)')" /> 

Я получаю эту ошибку: Не удалось найти часть пути.

Как скопировать C: \ Test \ файлы и подпапки в C: \ Destination \ with msbuild?

Заранее за вашу помощь.

+0

Я вставил код внутри мишени, созданы необходимый файлы локально, и я смог успешно скопировать эти файлы, выполнив ваш фрагмент в MSBuild. Существуют ли исходные файлы? Возможно, попробуйте запустить MSBuild с включенным диагностическим протоколированием, чтобы узнать, сможете ли вы получить дополнительные сведения об ошибке. – Michael

+0

Файлы папки назначения: C: \ Destination \ text.txt и C: \ Destination \ text1.txt, но мне нужны подпапки C: \ Destination \ Folder1 \ text.txt и C: \ Destination \ text1.txt. Он копирует только файлы, но не подпапки, что является моей проблемой. – Alphapage

+0

Я вижу. Моя основная цель состояла в том, чтобы устранить полученную вами ошибку, которой я не испытывал при запуске вашего кода. См. Мой представленный ответ для получения подробной информации о включении RecursiveDir в пути назначения. – Michael

ответ

3

Чтобы заполнить RecursiveDir metadata, вы должны указать рекурсивный подстановочный знак (двойные звездочки) в ваших элементах. Подстановочный знак ** будет отмечать относительную точку, в которой должен применяться рекурсивный Dir. В вашем примере, это звучит, как вы хотели бы, чтобы добавить ** подстановочные после C:\Test, так что ваш код должен был бы выглядеть следующим образом: например

<ItemGroup> 
    <Compile Include="C:\Test\**\Folder1\text.txt"/> 
    <Compile Include="C:\Test\**\text1.txt"/> 
</ItemGroup> 
<Copy SourceFiles="@(Compile)" DestinationFiles="@(Compile->'C:\Destination\%(RecursiveDir)%(Filename)%(Extension)')" /> 

Добавление подстановочные знаки, как показано выше, будет копировать файлы в следующие места:

C:\Destination\text1.txt 
C:\Destination\Folder1\text.txt 
1

То же самое, как и в ответ выше, но без дополнительного преобразования списка:

<ItemGroup> 
    <Compile Include="C:\Test\**\Folder1\text.txt"/> 
    <Compile Include="C:\Test\**\text1.txt"/> 
</ItemGroup> 
<Copy SourceFiles="@(Compile)" DestinationFolder="C:\Destination\%(RecursiveDir)" /> 
Смежные вопросы