c# O que está errado quando o Visual Studio me diz "xcopy saiu com o código 4"




visual-studio-2010 visual-studio-2012 (11)

Isso significa :

Erro de inicialização. Não há memória ou espaço em disco suficiente ou você digitou um nome de unidade inválido ou uma sintaxe inválida na linha de comando.

Então, basicamente, pode ser apenas sobre qualquer coisa haha ​​... tente executar o comando um de cada vez a partir do prompt de comando para descobrir qual parte do comando está lhe dando problemas.

Eu não estou muito familiarizado com eventos pós-compilação, então estou um pouco confuso sobre o que está errado com o meu programa. Ao compilar no visual studio 2010, recebo o seguinte:

The command "xcopy C:\Users\Me\Path\Foo.bar\Library\dsoframer.ocx C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
xcopy C:\Users\Me\Path\Foo.bar\ApplicationFiles C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
xcopy C:\Users\Me\Path\url\ C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
rmdir /S /Q C:\Users\Me\Path\Foo.bar\bin\Debug\.gwt-tmp" exited with code 4.    

O programa parece rodar bem, apesar desse erro, mas eu não quero simplesmente ignorar este problema e esperar que nada de ruim aconteça. Estranhamente, essa linha começou como um único comando (o primeiro xcopy), mas à medida que continuei a compilar o projeto (corrigindo outros problemas, principalmente referências), a mensagem de erro expandiu-se cada vez mais. Alguma idéia do que poderia estar acontecendo?

Edit: Aqui estão os eventos pós-construção que parecem estar falhando -

xcopy $(ProjectDir)Library\dsoframer.ocx $(TargetDir) /Y /E /D
xcopy $(ProjectDir)ApplicationFiles $(TargetDir) /Y /E /D
xcopy $(SolutionDir)com.myUrl.gwt\www $(TargetDir) /Y /E /D
rmdir /S /Q $(TargetDir).gwt-tmp

Eu tenho isso junto com a mensagem

Especificação de unidade inválida

ao copiar para um compartilhamento de rede sem especificar o nome do drive, por exemplo

xcopy . \\localhost

Onde

xcopy . \\localhost\share

era esperado


Eu corri através desta questão, então eu corri o comando xcopy da linha de comando e disse:

File creation error - The requested operation cannot be performed on a file with
 a user-mapped section open.

Na verdade, era o Visual Studio segurando alguma coisa. Eu apenas reiniciei o Visual Studio e funcionou.


O código de saída Xcopy 4 significa " Ocorreu um erro de inicialização. Não há memória ou espaço em disco suficiente ou você inseriu um nome de unidade inválido ou uma sintaxe inválida na linha de comando. "

Parece que o Visual Studio está fornecendo argumentos inválidos para o xcopy. Verifique seu comando de evento pós-compilação por meio de Project Properties > Right Click > Build Events > Post Build Event .

Observe que, se os termos de macro $(ProjectDir) ou semelhantes tiverem espaços nos caminhos resultantes quando expandidos, eles precisarão ser agrupados em aspas duplas. Por exemplo:

xcopy "$(ProjectDir)Library\dsoframer.ocx" "$(TargetDir)" /Y /E /D1

Além da resposta aceita, o erro também pode ocorrer quando a pasta de destino é somente leitura (comum ao usar o TFS)


Alterne a guia watch para a "saída" e procure o comando xcopy. Às vezes, aqui você encontra mais alguma mensagem (a saída xcopy real) que poderia ajudá-lo a resolver o problema. Se você não vir a guia de saída, use o menu Visualizar-Saída para exibi-la.


Como outras respostas explicam, o código de saída 4 pode ter várias causas.

Eu notei um caso, onde os nomes dos caminhos resultantes excediam o tamanho máximo permitido (exatamente como here ).

Eu substituí o xcopy por robocopy para o evento de construção de post afetado; O robocopy parece manipular caminhos ligeiramente diferentes e foi capaz de concluir a tarefa de cópia que o xcopy não conseguiu manipular.


Eu tinha um comando post build que funcionou muito bem antes de atualizar-se no VS 2017. Acontece que as ferramentas do SDK foram atualizadas e estavam sob um novo caminho para que não encontrasse a ferramenta que eu estava usando para assinar meus assemblies.

Isso mudou a partir disso ....

call "%VS140COMNTOOLS%vsvars32"
    "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64\sn.exe" -Ra "$(TargetPath)" "$(ProjectDir)Key.snk"

Para isso...

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\sn.exe" -Ra "$(TargetPath)" "$(ProjectDir)Key.snk"

Muito sutil, mas quebrando a mudança, então verifique seus caminhos após uma atualização, se você ver esse erro.


Eu recebi o erro ' exit with code 4 ' quando o comando xcopy tentou sobrescrever um arquivo readonly. Consegui resolver este problema adicionando / R ao comando xcopy. O / R indica que arquivos somente de leitura devem ser sobrescritos

comando antigo:

XCOPY /E /Y "$(ProjectDir)source file" "destination"

novo comando

XCOPY /E /Y /R "$(ProjectDir)source file" "destination"

Outra coisa a observar são barras duplas invertidas, já que o xcopy não as tolera no parâmetro do caminho de entrada (mas tolera-as no caminho de saída ...).


Se o arquivo de origem não encontrado, o xcopy retorna o código de erro 4 também.





xcopy