O que significa "encerrado com o código 9009" durante essa compilação?


292

O que essa mensagem de erro quer dizer? O que eu poderia fazer para corrigir esse problema?

AssemblyInfo.cs saiu com o código 9009


O problema provavelmente está acontecendo como parte de uma etapa pós-compilação em uma solução .NET no Visual Studio.


7
O OP não está voltando para corrigir esse problema, mas tem muitas respostas e muito suco do Google. Então, vamos tentar inferir o problema?
Anthony Mastrean

13
A janela de saída me deu algumas dicas sobre este problema que eu também estava tendo
hanzolo

Respostas:


241

Você tentou fornecer o caminho completo do comando que está sendo executado no comando de evento anterior ou posterior à compilação?

Eu estava recebendo o erro 9009 devido a um xcopycomando de evento pós-compilação no Visual Studio 2008.

O comando "xcopy.exe /Y C:\projectpath\project.config C:\compilepath\"saiu com o código 9009.

Mas no meu caso também foi intermitente. Ou seja, a mensagem de erro persiste até a reinicialização do computador e desaparece após a reinicialização do computador. Está de volta depois de algum problema remotamente relacionado que ainda estou para descobrir.

No entanto, no meu caso, fornecer o comando com o caminho completo resolveu o problema:

c:\windows\system32\xcopy.exe /Y C:\projectpath\project.config C:\compilepath\ 

Em vez de apenas:

xcopy.exe /Y C:\projectpath\project.config C:\compilepath\

Se eu não tiver o caminho completo, ele será executado por um tempo após uma reinicialização e depois será interrompido.

Também como mencionado nos comentários a esta postagem, se houver espaços no caminho completo, será necessário aspas ao redor do comando . Por exemplo

"C:\The folder with spaces\ABCDEF\xcopy.exe" /Y C:\projectpath\project.config C:\compilepath\

Observe que este exemplo com relação a espaços não é testado.


44
Também recebi o erro 9009 nos eventos pós e pré-compilação. Verificar a guia Saída no Visual Studio mostra o problema. No meu caso eu estava tentando acessar um caminho que contém um espaço
Phil Hale

16
Eu tive um problema semelhante a isso, mas foi o resultado de espaços nos nomes das pastas. Colocar os caminhos entre aspas ( "$(SolutionDir)packages\NUnit.2.5.10.11092\tools\"nunit-console "$(TargetPath)") resolveu isso.
Justin Morgan

1
Eu encontrei um problema semelhante com um evento de pré-construção que usava um applet Java para pré-compilar JS e CSS ... Acontece que tínhamos deixado de colocar o Java Runtime no servidor.
saluce 11/05

2
É possível que a PATHvariável de ambiente se perca de alguma forma? Eu recebo esse erro de vez em quando. Eu tenho a npm installconfiguração como um evento de pré-construção e, inicialmente, funciona (então presumo que tudo esteja configurado), mas, aleatoriamente, parará de funcionar durante o dia (geralmente ao alternar entre soluções / ramificações, acredito) e não funcionará mais. conhecer npm. Reiniciar o VS 'corrige' isso ... significa que o meu PATHestá configurado corretamente, mas parece que o VS. Se houvesse uma maneira de visualizar as variáveis ​​env de dentro do VS, eu poderia confirmar isso.
precisa saber é o seguinte

2
Se você deseja proteger seu build contra falhas em diferentes ambientes, digamos, janelas instaladas em D: \, use vars de ambiente em conjunto com a resposta @thehhv:%systemroot%\System32\xcopy ...
Dorival

110

Código de erro 9009 significa arquivo de erro não encontrado. Todas as razões subjacentes postadas nas respostas aqui são uma boa inspiração para descobrir o porquê, mas o próprio erro simplesmente significa um caminho ruim.


1
Meu problema com o arquivo não encontrado foi a referência no arquivo csproj era $ (PROGRAMFILES) \ Microsoft SDKs \ TypeScript \ tsc e tinha que ser $ (PROGRAMFILES) \ Microsoft SDKs \ TypeScript \ 1.0 \
tsc

Obrigado por realmente responder à primeira pergunta.
AntonK

E isso significa não encontrar nenhum arquivo que o comando tentado possa estar envolvendo, mesmo quando não foi possível encontrar o próprio comando. Eu estava usando delete em vez de del. Isso daria a você um 9009 também.
Mircea Ion

84

Isso acontece quando faltam algumas configurações de ambiente para o uso das ferramentas do Microsoft Visual Studio x86.
Portanto, tente adicionar como primeiro comando nas etapas pós-compilação:

Para o Visual Studio 2010, use:

call "$(DevEnvDir)..\Tools\vsvars32.bat"

Como o @FlorianKoch mencionado nos comentários, para o VS 2017, use:

call "$(DevEnvDir)..\Tools\VsDevCmd.bat"

Deve ser colocado antes de qualquer outro comando.
Ele definirá o ambiente para o uso das ferramentas do Microsoft Visual Studio x86.


3
Você poderia me ajudar - onde e em qual arquivo devo adicionar a linha call "$(DevEnvDir)..\Tools\vsvars32.bat"? Obrigado
surfmuggle

2
Eu tive que adicionar uma entrada à minha Pathvariável de ambiente. Verifique a janela Saída para mais informações.
paqogomez

Cuidado. Isto irá falhar em muitos servidores de compilação: blogs.clariusconsulting.net/kzu/devenvdir-considered-harmful
George Mauer

2
Obrigado, pela cadeia de ferramentas de x64 bits que resolvi da seguinte maneira: "$ (DevEnvDir) .. \ VC \ vcvarsall.bat"
codekiddy

1
Para o VS 2017, o arquivo é"$(DevEnvDir)..\Tools\VsDevCmd.bat"
Florian Koch

57

Provavelmente você tem espaço no caminho resultante.

Você pode contornar isso citando os caminhos, permitindo espaços. Por exemplo:

xcopy "$(SolutionDir)\Folder Name\File To Copy.ext" "$(TargetDir)" /R /Y /I

9
+1 - Esse é exatamente o problema que eu estava tendo. Um comando na minha pós-compilação funcionou quando construí o projeto localmente, mas falhou quando foi compilado no servidor de compilação. Acabei de colocar o comando entre aspas duplas para corrigi-lo. Obrigado.
precisa saber é o seguinte

Portanto, é razoável especular que o erro 9009 seja "arquivo não encontrado" ..? Pessoalmente, acho que a pergunta "o que é o erro 9009 do MSBuild?" deve estar perfeitamente bem como uma pergunta independente, mas direcionada à Microsoft!
o DAG

11

Tinha a mesma variável depois de alterar a variável PATH de Variáveis ​​Ambientais no Win 7. A mudança de volta para o padrão ajudou.


10

Eu tive o erro 9009 quando meu script de evento pós-compilação estava tentando executar um arquivo em lotes que não existia no caminho especificado.


6

Causei esse erro quando redigitei minha variável de ambiente Path. Após a edição, adicionei acidentalmentePath= o início da string do caminho. Com uma variável de caminho malformada, não consegui executar o XCopy na linha de comando (nenhum comando ou arquivo não foi encontrado) e o Visual Studio se recusou a executar a etapa pós-compilação, citando erro no código 9009.

O XCopy geralmente reside em C: \ Windows \ System32. Depois que a variável de ambiente Path permitiu que o XCopy fosse resolvido no prompt do DOS, o Visual Studio criou bem minha solução.


6

Meu erro exato foi

The command "iscc /DConfigurationName=Debug "C:\Projects\Blahblahblah\setup.iss"" exited with code 9009.

9009 significa que o arquivo não foi encontrado, mas na verdade não foi possível encontrar a parte "iscc" do comando.

Corrigi-o adicionando ";C:\Program Files\Inno Setup 5 (x86)\"à variável de ambiente do sistema"path"


5

Se o script realmente faz o que precisa ser feito e o Visual Studio está incomodando o erro, você pode adicionar:

exit 0

até o final do seu script.


5
ocultar qualquer erro em potencial não deve ser o caminho a seguir
igelineau

1
Eu concordo que isso não deve ser mascarado
AltF4_

5

Verifique a ortografia. Eu estava tentando chamar um executável, mas o nome estava incorreto e ele me deu a exited with code 9009mensagem.


1
Para isso, adicione uma verificação da existência do executável no seu sistema.
Joshua Drake

5

No meu caso, eu tive que "CD" (Alterar diretório) primeiro no diretório apropriado, antes de chamar o comando, pois o executável que eu estava chamando estava no diretório do projeto.

Exemplo:

cd "$(SolutionDir)"
call "$(SolutionDir)build.bat"

1
Isso resolveu o problema para mim correr Visual devenv.exe do Studio, mas você não precisa especificar a pasta pela segunda vez, build.bat just'call vai fazer
FrinkTheBrave

4

Outra variante:

hoje eu chamo intérprete python do cron no win32 e tomo o ExitCode (% ERRORLEVEL%) 9009, porque a conta do sistema usada pelo cron não tem caminho para o diretório Python.


4

O problema no meu caso ocorreu quando tentei usar um comando na linha de comando para o evento Pós-compilação na minha Biblioteca de Classes de Teste. Quando você usa aspas da seguinte forma:

"$(SolutionDir)\packages\NUnit.Runners.2.6.2\tools\nunit" "$(TargetPath)" 

ou se você estiver usando o console:

"$(SolutionDir)\packages\NUnit.Runners.2.6.2\tools\nunit-console" "$(TargetPath)"

Isso corrigiu o problema para mim.


4

A resposta da tfa foi reduzida, mas na verdade pode causar esse problema. Graças ao hanzolo, procurei na janela de saída e encontrei o seguinte:

3>'gulp' is not recognized as an internal or external command,
3>operable program or batch file.
3>D:\dev\<filepath>\Web.csproj(4,5): error MSB3073: The command "gulp clean" exited with code 9009.

Depois de executar npm install -g gulp, parei de receber esse erro. Se você estiver recebendo esse erro no Visual Studio, verifique a janela de saída e veja se o problema é uma variável de ambiente não definida.


3

Além disso, verifique se não há quebras de linha na janela de edição do evento pós-compilação no seu projeto. Às vezes, copiar o comando xcopy da Web quando estiver com várias linhas e colá-lo no VS causará um problema.


Embora jesse faça um bom argumento sobre não ter quebras de linha no meio de um comando xcopy, observe que, no caso geral, é válido ter quebras de linha nesse campo; cada linha deve ser interpretada como seu próprio comando.
precisa saber é o seguinte

3

Eu adicionei "> myFile.txt" ao final da linha na etapa de pré-compilação e, em seguida, inspecionei o arquivo quanto ao erro real.


2

Para mim, o espaço em disco era baixo e os arquivos que não podiam ser gravados deveriam estar presentes mais tarde. Outras respostas mencionaram arquivos ausentes (ou arquivos com nomes incorretos / incorretamente referenciados por nome) - mas a causa principal foi a falta de espaço em disco.


2

Para mim, aconteceu após a atualização dos pacotes de nuget de uma versão do PostSharp para a próxima em uma grande solução (projeto ~ 80). Eu tenho erros de compilador para projetos que possuem comandos nos eventos do PreBuild.

'cmd' não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lote. C: \ Arquivos de Programas (x86) \ MSBuild \ 14.0 \ bin \ Microsoft.Common.CurrentVersion.targets (1249,5): erro MSB3073: O comando "cmd / c C: \ GitRepos \ main \ ServiceInterfaces \ DEV.Config \ PreBuild.cmd ServiceInterfaces "encerrado com o código 9009.

A variável PATH foi corrompida, tornando-se muito longa com vários caminhos repetidos relacionados ao PostSharp.Patterns.Diagnostics. Quando fechei o Visual Studio e o abri novamente, o problema foi corrigido.


2

Ainda outra variante do arquivo não encontrada, devido aos espaços no caminho. No meu caso, no script msbuild. Eu precisava usar o estilo HTML & quot; cadeias dentro do comando exec.

<!-- Needs quotes example with my Buildscript.msbuild file --> 
<Exec Command="&quot;$(MSBuildThisFileDirectory)\wix\wixscript.bat&quot; $(VersionNumber) $(VersionNumberShort)" 
    ContinueOnError="false" 
    IgnoreExitCode="false" 
    WorkingDirectory="$(MSBuildProjectDirectory)\wix" />

2

O mesmo que as outras respostas, no meu caso, foi por causa do arquivo ausente. Para saber qual é o arquivo ausente, você pode ir para a janela de saída e ela mostrará imediatamente o que está faltando.

Para abrir a janela de saída no Visual Studio:

  1. Ctrl + Alt + O
  2. Exibir> Saída

insira a descrição da imagem aqui


2

Corrigi isso simplesmente reiniciando o Visual Studio - eu tinha acabado de executar dotnet tool install xxxem uma janela do console e o VS ainda não havia capturado as novas variáveis ​​de ambiente e / ou configurações de caminho que foram alteradas; portanto, uma reinicialização rápida corrigiu o problema.


1

Isso é bastante básico, eu tive esse problema e falha simples e embaraçosa.

O aplicativo usa argumentos de linha de comando, eu os removi e os adicionei novamente. De repente, o projeto falhou na construção.

Visual Studio -> Propriedades do projeto -> verifique se você usa a guia 'Debug' (não a guia 'Build Events') -> argumentos da linha de comando

Usei a área de texto Post / Pre-build, que estava errada neste caso.


1

Minha solução foi simples: você tentou desligá-lo e ligá-lo novamente? Então, reiniciei o computador e o problema desapareceu.


1

Também encontrei esse 9009problema ao enfrentar uma situação de substituição.

Basicamente, se o arquivo já existe e você não especificou a /yopção (que substitui automaticamente), esse erro pode ocorrer quando executado a partir de uma compilação.


0

Na verdade, notei que, por algum motivo, a variável de ambiente% windir% às vezes é apagada. O que funcionou para mim foi redefinir a variável de ambiente windir como c: \ windows, reiniciar o VS e é isso. Dessa forma, você evita a necessidade de modificar os arquivos da solução.


0

Pelo menos no Visual Studio Ultimate 2013, versão 12.0.30723.00, atualização 3, não é possível separar uma instrução if / else com uma quebra de linha:

trabalho:

if '$(BuildingInsideVisualStudio)' == 'true' (echo local) else (echo server)

não funciona:

if '$(BuildingInsideVisualStudio)' == 'true' (echo local) 
else (echo server)

0

Outro motivo: se o evento de pré-compilação referenciar outro caminho da bandeja de projetos e você vir esse erro ao executar o msbuild, mas não o Visual Studio, será necessário organizar manualmente os projetos no arquivo * .sln (com um editor de texto) para que que o projeto que você está direcionando no evento é criado antes do projeto do evento. Em outras palavras, o msbuild usa a ordem em que os projetos são listados no arquivo * .sln, enquanto o VS usa o conhecimento das dependências do projeto. Isso aconteceu quando uma ferramenta que cria um banco de dados para ser incluído em um wixproj foi listada após o wixproj.


0

Acho que no meu caso havia símbolos russos no caminho (todos os projetos estavam na pasta do usuário). Quando coloquei a solução em outra pasta (diretamente no disco), tudo ficou bem.


0

Minha solução foi criar uma cópia do arquivo e adicionar uma etapa à tarefa de compilação para copiar meu arquivo sobre o original.


0

Você precisa se certificar de ter instalado o grunhido globalmente

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.