Copie o (s) arquivo (s) de um projeto para outro usando o evento pós-compilação… VS2010

132

Eu tenho uma solução com 3 projetos nele. Eu preciso copiar uma visão de um projeto para outro. Sou capaz de copiar a DLL criada por meio de eventos pós-compilação da seguinte forma:

insira a descrição da imagem aqui

Então, eu quero copiar o arquivo no projeto um '/Views/ModuleHome/Index.cshtml' para uma pasta no projeto 2. Como copiar arquivos para o meu projeto desejado via evento pós-compilação? obrigado

Destinado à glória
fonte

Respostas:

309
xcopy "$(ProjectDir)Views\Home\Index.cshtml" "$(SolutionDir)MEFMVCPOC\Views\Home"

e se você deseja copiar pastas inteiras:

xcopy /E /Y "$(ProjectDir)Views" "$(SolutionDir)MEFMVCPOC\Views"

Atualização: aqui está a versão de trabalho

xcopy "$(ProjectDir)Views\ModuleAHome\Index.cshtml" "$(SolutionDir)MEFMVCPOC\Views\ModuleAHome\" /Y /I

Aqui estão alguns switches comumente usados ​​com xcopy:

  • / I - trata como um diretório se estiver copiando vários arquivos.
  • / Q - Não exibe os arquivos que estão sendo copiados.
  • / S - Copie subdiretórios, a menos que esteja vazio.
  • / E - Copie subdiretórios vazios.
  • / Y - Não solicita a substituição de arquivos existentes.
  • / R - sobrescreve arquivos somente leitura.
Darin Dimitrov
fonte
2
Adicionei esta linha à minha compilação de mensagens e recebo o erro "Erro 1 O comando" xcopy "C: \ Users \ tcompton \ Downloads \ MEFMVCPOC \ ModuleA \ Views \ ModuleAHome \ Index.cshtml" "C: \ Users \ tcompton \ O \ MEFMVCPOC \ MEFMVCPOC \ Views \ ModuleAHome "" saiu com o código 2. " O que isto significa?
boundforglory
Olhe para a janela de saída: Ctrl+W+O. A Views\ModuleAHomepasta existe no local de destino? Olhe para a janela de saída para o comando exato que está sendo executado e, em seguida, ler a documentação para o comando xcopy para entender as diferentes opções disponíveis: xcopy /?.
Darin Dimitrov
1
A pasta 'Views \ ModuleAHome' existe, mas não faz parte do projeto de destino, o que significa que você precisa clicar em 'mostrar todos os arquivos' para que apareça no VS.
BoundForGlory
1
Eu não acho que o fato de a pasta de destino não fazer parte do projeto de destino faça alguma diferença para o xcopy. Este comando opera diretamente com o sistema de arquivos. No que diz respeito a fazer com que essa pasta apareça como parte do projeto de destino, automatizar essa tarefa pode ser mais difícil.
Darin Dimitrov
1
Entendi ... xcopy "$ (ProjectDir) Views \ ModuleAHome \ Index.cshtml" "$ (SolutionDir) MEFMVCPOC \ Views \ ModuleAHome \" / A / Y.este artigo ajudou junto com sua entrada social.msdn. microsoft.com/Forums/uk/csharpgeneral/thread/…
BoundForGlory
20
xcopy "your-source-path" "your-destination-path" /D /y /s /r /exclude:path-to-txt- file\ExcludedFilesList.txt

Observe as aspas no caminho de origem e no destino, mas não no caminho para excluir o arquivo txt da lista.

O conteúdo de ExcludedFilesList.txt é o seguinte: .cs \

Estou usando este comando para copiar arquivo de um projeto na minha solução para outro e excluindo arquivos .cs.

/D Copy only files that are modified in sourcepath
/y Suppresses prompting to confirm you want to overwrite an existing destination file.
/s Copies directories and subdirectories except empty ones.
/r Overwrites read-only files.
Hallgeir Engen
fonte
Obrigado. O / exclude: funciona após adicionar aspas a your-source-pathe your-destination-path. Sem essas citações, não funciona.
AecoLiu 20/05
@AechoLiu As aspas são sempre necessárias se o caminho do arquivo tiver espaço em branco, por exemplo "My File.txt".
Felipe Romero
14

xcopy "$ (TargetDir) * $ (TargetExt)" "$ (SolutionDir) \ Scripts \ MigrationScripts \ Library \" / F / R / Y / I

/ F - Exibe os nomes completos dos arquivos de origem e de destino

/ R - Isso substituirá arquivos somente leitura

/ Y - Suprime a solicitação para substituir um (s) arquivo (s) existente (s)

/ I - assume que o destino é diretório (mas deve terminar com)

Um pequeno truque no destino, você deve terminar com o caractere \ para informar ao xcopy que o destino é diretório e não arquivo!

Namrata Jain
fonte
8

BatchArquivo de chamada que será executado Xcopypara a origem de arquivos necessária para o destino

call "$(SolutionDir)scripts\copyifnewer.bat"
swapneel
fonte
7

Eu uso assim.

xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)Lib\TIRM\x86\" /F /Y 
xcopy "$(TargetDir)$(TargetName).lib" "$(SolutionDir)Lib\TIRM\x86\" /F /Y 


/F : Copy source is File   
/Y : Overwrite and don't ask me

Observe o uso disso. $ (TargetDir) já '\' "D: \ MyProject \ bin \" = $ (TargetDir)

Você pode encontrar macro no editor de comandos

insira a descrição da imagem aqui

Super-Mantis
fonte
1
Projeto @HarshilDoshi → Propriedade do projeto → Eventos de construção → PostBuildEvent
Polluks
3

Este comando funciona como um encanto para mim:

for /r "$(SolutionDir)libraries" %%f in (*.dll, *.exe) do @xcopy "%%f" "$(TargetDir)"

Ele copia recursivamente todos os arquivos dlle para o ou .exeMySolutionPath\librariesbin\debugbin\release

Você pode encontrar mais informações aqui

Bizhan
fonte
2

Como as respostas anteriores, também estou sugerindo xcopy. No entanto, gostaria de acrescentar à resposta de Hallgeir Engen com o /excludeparâmetro Parece haver um erro no parâmetro que impede que ele trabalhe com nomes de caminhos longos ou que contenham espaços, pois as aspas não funcionarão. Os nomes dos caminhos precisam estar no formato "DOS" com "Documentos" traduzindo para "DOCUME ~ 1" (de acordo com esta fonte ).

Portanto, se você deseja usar o parâmetro \ exclude, há uma solução alternativa aqui :

cd $(SolutionDir)
xcopy "source-relative-to-path-above" "destination-relative-to-path-above
/exclude:exclude-file-relative-path

Observe que os caminhos de origem e destino podem (e devem, se contiverem espaços) estar entre aspas, mas não o caminho para o arquivo de exclusão.

kim
fonte
2

Se você quiser levar em consideração a plataforma (x64, x86 etc.) e a configuração (Debug ou Release), seria algo como isto:

xcopy "$(SolutionDir)\$(Platform)\$(Configuration)\$(TargetName).dll" "$(SolutionDir)TestDirectory\bin\$(Platform)\$(Configuration)\" /F /Y 
Flot2011
fonte