Как копировать папки - FAKE F#MAKE
Я использую Copy
Функция FAKE для копирования файлов из project1 в папку release, я использую следующий код:
Target "CopyProject1" (fun _ ->
!!(buildDir @@ "/_PublishWebsites/Project1/**/*.*")
|> Copy releaseDir
)
чтобы скопировать файлы из папки Project1 в папку выпуска, затем все файлы внутри Project1 копируются в папку выпуска, но я хочу сохранить структуру папок Project1 внутри папки выпуска, т.е. я хочу скопировать папки Project1 для выпуска, возможно ли это или мне придется создавать подпапки внутри моих папок релиза и копировать одну за другой. а если такого способа нет, то возможно ли это с помощью пользовательской задачи?
Если кто-то может помочь в этом отношении, это было бы очень полезно.
2 ответа
Это доступно через CopyWithSubfoldersTo. Это описание говорит, что это:
Копирует несколько групп файлов, каждая из которых представлена объектом FileInclude, в целевую папку, сохраняя структуру папок, начиная с BaseDirectory каждого FileInclude.
Параметры такие же, как у Copy:
Target "CopyProject1" (fun _ ->
[!!(buildDir @@ "/_PublishWebsites/Project1/**/*.*")]
|> CopyWithSubfoldersTo releaseDir
)
РЕДАКТИРОВАТЬ
CopyWithSubfoldersTo
работает с seq<FileInculdes>
в то время как !!
возвращает один FileIncludes
, Это должно быть преобразовано в один список элементов, прежде чем его можно будет использовать.
Я использовал CopyDir
Функция FAKE, и это рекурсивное копирование каталогов, нам просто нужно дать имя папки и место назначения, куда мы хотим копировать папки. Вот код:
Target "CopyFoldersTargetLocation" (fun _ ->
CopyDir targetDir SourceDir allFiles
)
Поскольку другие решения не работали для моего случая, вот мое домашнее решение с использованием основных методов.NET:
let rec copyFilesRecursively (source: DirectoryInfo) (target: DirectoryInfo) =
source.GetDirectories()
|> Seq.iter (fun dir -> CopyFilesRecursively dir (target.CreateSubdirectory dir.Name))
source.GetFiles()
|> Seq.iter (fun file -> file.CopyTo(target.FullName @@ file.Name, true) |> ignore)
Target "CopyProject1" <| fun _ ->
let source = buildDir @@ "/_PublishWebsites/Project1/"
let target = releaseDir
copyFilesRecursively (directoryInfo source) (directoryInfo target)