Gostaria de saber se alguém poderia me ajudar com alguns scripts msbuild que estou tentando escrever. O que eu gostaria de fazer é copiar todos os arquivos e subpastas de uma pasta para outra pasta usando msbuild.
{ProjectName}
|----->Source
|----->Tools
|----->Viewer
|-----{about 5 sub dirs}
O que preciso fazer é copiar todos os arquivos e subpastas da pasta de ferramentas para a pasta de depuração do aplicativo. Este é o código que tenho até agora.
<ItemGroup>
<Viewer Include="..\$(ApplicationDirectory)\Tools\viewer\**\*.*" />
</ItemGroup>
<Target Name="BeforeBuild">
<Copy SourceFiles="@(Viewer)" DestinationFolder="@(Viewer->'$(OutputPath)\\Tools')" />
</Target>
O script de construção é executado, mas não copia nenhum dos arquivos ou pastas.
obrigado
scripting
msbuild
build-process
build
Nathan W
fonte
fonte
%(RecursiveDir)
à pasta de destino recriará a estrutura do diretório. Caso contrário, a saída é plana. Esta é a melhor resposta.Acho que o problema pode estar em como você está criando seu ItemGroup e chamando a tarefa de cópia. Veja se isso faz sentido:
fonte
CreateItem
tarefa está obsoleta. regex tem a alternativa. msdn.microsoft.com/en-us/library/s2y3e43x.aspxEu sou meio novo no MSBuild, mas acho a Tarefa EXEC útil para situações como essas. Encontrei o mesmo desafio em meu projeto e funcionou para mim e foi muito mais simples. Alguém me avise se não for uma boa prática.
fonte
Copy
tarefa em vez de um comando é a compatibilidade. Eu construí no Linux usando Mono antes e obviamentexcopy
não funciona lá.\**\*.*
ajuda a obter arquivos de todas as pastas. RecursiveDir ajuda para colocar todos os arquivos na respectiva pasta ...fonte
CreateItem
tarefa está obsoleta. regex tem a alternativa. msdn.microsoft.com/en-us/library/s2y3e43x.aspxVocê tentou especificar o diretório de destino concreto em vez de
Não sou muito proficiente com a sintaxe MSBuild avançada, mas
parece estranho para mim. O script parece bom, então o problema pode estar nos valores de
$(ApplicationDirectory)
e$(OutputPath)
EDITAR:
Aqui está uma postagem do blog que pode ser útil:
Como: copiar arquivos recursivamente usando a tarefa
fonte
Este é o exemplo que funcionou:
fonte: https://msdn.microsoft.com/en-us/library/3e54c37h.aspx
fonte
Esta é uma tarefa de cópia que usei em meu próprio projeto, funcionou perfeitamente para mim que copia a pasta com subpastas para o destino com sucesso:
No meu caso, copiei a pasta de publicação de um projeto para outra pasta de destino, acho que é semelhante ao seu caso.
fonte
Pessoalmente, usei CopyFolder, que faz parte da Biblioteca de Tarefas do SDC.
http://sdctasks.codeplex.com/
fonte
A melhor maneira de copiar arquivos recursivamente de um diretório para outro usando o MSBuild é usando a tarefa Copiar com SourceFiles e DestinationFiles como parâmetros. Por exemplo - para copiar todos os arquivos do diretório de construção para o diretório de backup será
Agora, no comando Copiar acima, todos os diretórios de origem são percorridos e os arquivos são copiados para o diretório de destino.
fonte
Se você estiver trabalhando com um conjunto de ferramentas C ++ típico, outra maneira é adicionar seus arquivos à lista CopyFileToFolders padrão
Além de ser simples, este é um bom caminho a seguir porque a tarefa CopyFilesToFolders irá gerar entradas, saídas e até arquivos TLog apropriados, portanto, certificando-se de que as operações de cópia serão executadas apenas quando um dos arquivos de entrada for alterado ou um dos arquivos de saída estiver faltando. Com o TLog, o Visual Studio também reconhecerá corretamente o projeto como "atualizado" ou não (ele usa um mecanismo U2DCheck separado para isso).
fonte