Eu tenho um VS2008 e desejo copiar certos arquivos de um diretório para minha /bin/
pasta. Eu defini os arquivos (localizados em /common/browserhawk/
) como "Copiar para o diretório de saída". No entanto, ele copia a estrutura de pastas também: os arquivos são copiados para/bin/common/browserhawk/
Como faço para copiar esses arquivos para o Just /bin/
? Não desejo armazená-los na raiz do site para que sejam copiados corretamente.
Pergunta relacionada: Visual Studio adiciona .dll e .pdb ao projeto após a compilação
fonte
xcopy /s /d /y "$(ProjectDir)\stuff" "$(TargetDir)\stuff"
Como não posso comentar as respostas anteriores, colocarei a solução aqui:
Adicionando ao que @PaulAlexander forneceu, adicione o seguinte ao seu arquivo .csproj / .vbproj:
Isso permite que você selecione "RootContent" como a ação de construção na janela Propriedades, e tudo pode ser acessado por meio da GUI. Uma explicação mais completa: a opção "AvailableItemName" basicamente cria uma nova lista nomeada à qual você pode atribuir itens no projeto sob a propriedade "Build Action" na janela Properties. Você pode então usar essa lista recém-criada em qualquer destino que desejar (por exemplo, via "@ (RootContent)").
fonte
AvailableItemName
ser um elemento inválido se você editar o arquivo de projeto no VS; apenas ignore o aviso, ele funciona de qualquer maneira.<Target Name="RootOutputCopyTarget" AfterTargets="Build">
... </Target>Se você editar .csproj / .vbproj em um editor de texto, poderá controlar onde o arquivo é colocado no diretório de saída e também qual nome o arquivo terá no diretório de saída. Por exemplo:
Isso colocará o arquivo
content\someContent.txt
embin\someContentInOutputDirectory.txt
. Você também pode escolher um subdiretório,bin
se desejar; basta adicioná-lo ao elemento Link.fonte
Acredito que o comando XCOPY lida melhor com diretórios e arquivos. Portanto,
O que permite a criação de pastas fora do diretório de destino.
A pasta do projeto / estrutura de arquivos de:
Torna-se:
fonte
/D
também pode ser útil, para evitar a substituição de possíveis alterações.Adicione o seguinte ao seu arquivo .csproj / .vbproj
Em seguida, altere a Build Action de quaisquer arquivos que você deseja na pasta raiz para RootContent.
fonte
RootContent
ele não aparece na lista suspensa "Build Action" e inseri-lo manualmente resulta em um erro "Property value not valid" do Visual Studio. O que eu perdi?Eu usei isso no VS2010, VS2015, VS2017 e VS2019. Eu prefiro esta solução porque:
Perto do início do arquivo de projeto:
Emprestado desta resposta
Após a importação do Microsoft .targets:
Emprestado desta resposta
fonte
RootContent
que significa "hard coded" paraCustomContent
indicar que este é o conteúdo especializado que estamos adicionando a este projeto e que precisamos copiar dessa maneira particular. Também como um aparte, eu preciseiTargetPath=%(RecursiveDir)%(Filename)%(Extension)
recriar a estrutura de pastas dosCustomContent
arquivos especificados para o caminho de saída./common/browserhawk/
sejam copiados/bin/common/browserhawk/
como o OP disse? IIRC, minha intenção era/common/browserhawk/a.txt
terminar em,/bin/a.txt
mas permitir a recursão de lá para baixo, então/common/browserhawk/secret/stuff.png
acaba em/bin/secret/stuff.png
.%(RecursiveDirectory)
. Isso é muito legal, porque além de selecionar arquivos individuais no IDE, você também pode especificar vários arquivos com curingas. Ao usar o**
curinga, toda a estrutura da pasta será preservada.Acabei adicionando uma etapa ao arquivo de compilação nant para copiar após a conclusão bem-sucedida
fonte
Você pode construir um arquivo em lote para copiar os arquivos e executá-lo como um evento pós-construção.
fonte