Что означает «выход с кодом 9009» во время этой сборки?

292

Что означает это сообщение об ошибке? Что я мог сделать, чтобы исправить эту проблему?

AssemblyInfo.cs вышел с кодом 9009


Проблема, вероятно, возникает как часть шага после сборки в решении .NET в Visual Studio.

Энтони Мастреан
источник
7
ОП не вернется, чтобы решить эту проблему, но у него много ответов и много сока Google. Итак, давайте попробуем вывести проблему?
Энтони Мастреан
13
Окно «Вывод» дало мне некоторое представление об этой проблеме, которое у меня тоже было
hanzolo

Ответы:

241

Вы пытались указать полный путь к команде, которая выполняется в команде события до или после сборки?

Я получал ошибку 9009 из-за xcopyкоманды события после сборки в Visual Studio 2008.

Команда "xcopy.exe /Y C:\projectpath\project.config C:\compilepath\"вышла с кодом 9009.

Но в моем случае это было также с перебоями. То есть сообщение об ошибке сохраняется до перезагрузки компьютера и исчезает после перезагрузки компьютера. Это вернулось после некоторой отдаленно связанной проблемы, которую я еще должен обнаружить.

Тем не менее, в моем случае предоставление команды с полным путем решило проблему:

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

Вместо просто:

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

Если у меня нет полного пути, он запускается некоторое время после перезапуска, а затем останавливается.

Также, как уже упоминалось в комментариях к этому сообщению, если в пути есть пробелы , необходимо ввести кавычки вокруг команды . Например

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

Обратите внимание, что этот пример с пробелами не тестировался.

thehhv
источник
44
Я также получил ошибку 9009 на событиях post и pre build. Проверка вкладки «Вывод» в Visual Studio показывает проблему. В моем случае я пытался получить доступ к пути, содержащему пробел
Фил Хейл
16
У меня была похожая проблема с этим, но это было результатом пробелов в именах папок. Помещение путей в кавычки ( "$(SolutionDir)packages\NUnit.2.5.10.11092\tools\"nunit-console "$(TargetPath)") решило это.
Джастин Морган
1
Я столкнулся с подобной проблемой с событием перед сборкой, в котором для предварительной компиляции JS и CSS использовался апплет Java ... оказывается, мы забыли разместить Java Runtime на сервере.
приветствие
2
Возможно ли, что PATHпеременная окружения как-то теряется? Я получаю эту ошибку время от времени. Я npm installнастроил как событие перед сборкой, и изначально он работает (поэтому я предполагаю, что все настроено), но затем случайным образом он перестает работать в течение дня (как правило, при переключении между решениями / ветвями, как мне кажется), и больше не будет знать о npm. Перезапуск VS «исправляет» это ... означает, что my PATHнастроен правильно, но, похоже, встает на VS. Если бы был способ просмотра переменных env из VS, я мог бы это подтвердить.
jamiebarrow
2
Если вы хотите защитить свою сборку от сбоев в различных средах, скажем, окна, установленные на D: \, используйте переменные среды вместе с ответом @thehhv:%systemroot%\System32\xcopy ...
Dorival
110

Код ошибки 9009 означает, что файл ошибки не найден. Все причины, приведенные в ответах, являются хорошим источником вдохновения, чтобы понять, почему, но сама ошибка просто означает неверный путь.

Крис Москини
источник
1
Моя проблема с файлом, который не был найден, была ссылка в файле csproj была $ (PROGRAMFILES) \ Microsoft SDKs \ TypeScript \ tsc и должна была быть $ (PROGRAMFILES) \ Microsoft SDKs \ TypeScript \ 1.0 \ tsc
RHAD
Спасибо за ответ на первый вопрос.
AntonK
И это означает, что не удается найти какой-либо файл, который может содержать попытавшаяся команда, даже если он не может найти саму команду. Я использовал удалить вместо Del. Это тоже даст вам 9009.
Мирча Ион
84

Это происходит, когда вам не хватает некоторых параметров среды для использования инструментов Microsoft Visual Studio x86.
Поэтому попробуйте добавить в качестве первой команды ваши шаги после сборки:

Для Visual Studio 2010 используйте:

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

Как упоминалось в комментариях @FlorianKoch, для VS 2017 используйте:

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

Это должно быть помещено перед любой другой командой.
Это установит среду для использования инструментов Microsoft Visual Studio x86.

HRKoder
источник
3
Не могли бы вы мне помочь - где и в какой файл мне нужно добавить строку call "$(DevEnvDir)..\Tools\vsvars32.bat"? Спасибо
surfmuggle
2
Мне пришлось добавить запись в мою Pathпеременную среды. Проверьте окно вывода для получения дополнительной информации.
Пакогомес
Внимание. Это не удастся на многих серверах сборки: blogs.clariusconsulting.net/kzu/devenvdir-considered-harmful
Джордж Мауэр
2
Спасибо, за x64 битный набор инструментов я решил так: "$ (DevEnvDir) .. \ VC \ vcvarsall.bat"
codekiddy
1
Для VS 2017 файл"$(DevEnvDir)..\Tools\VsDevCmd.bat"
Флориан Кох
57

Скорее всего, у вас есть место на вашем пути следования.

Вы можете обойти это, указав пути, тем самым оставляя пробелы. Например:

xcopy "$(SolutionDir)\Folder Name\File To Copy.ext" "$(TargetDir)" /R /Y /I
NileshChauhan
источник
9
+1 - Это именно та проблема, которая у меня была. Команда в моей пост-сборке работала, когда я строил проект локально, но не выполнялась, когда он был собран на сервере сборки. Я просто поместил команду между двойными кавычками, чтобы исправить это. Спасибо.
Шейхьябути
Так разумно ли предположить, что ошибка 9009 "файл не найден"? Лично я считаю вопрос "что такое ошибка MSBuild 9009?" должно быть прекрасно в качестве отдельного вопроса, но направлено в Microsoft!
Даг
11

Была такая же переменная после изменения переменной PATH из переменных среды в Win 7. Помогло возвращение к стандартному.

Радомир Шевчик
источник
10

У меня была ошибка 9009, когда мой сценарий событий после сборки пытался запустить пакетный файл, который не существовал по указанному пути.

SleepyBoBos
источник
6

Я вызвал эту ошибку, когда отредактировал переменную окружения Path. После редактирования я случайно добавил Path=в начало строки пути. С такой неверно сформированной переменной пути мне не удалось запустить XCopy в командной строке (команда или файл не найдены), и Visual Studio отказалась выполнить шаг после сборки, сославшись на ошибку с кодом 9009.

XCopy обычно находится в C: \ Windows \ System32. Как только переменная среды Path позволила разрешить XCopy по приглашению DOS, Visual Studio хорошо построила мое решение.

GregC
источник
6

Моя точная ошибка была

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

9009 означает, что файл не найден, но на самом деле не удалось найти часть команды «iscc».

Я исправил это, добавив ";C:\Program Files\Inno Setup 5 (x86)\"в системную переменную среды"path"

SCW
источник
5

Если скрипт на самом деле делает то, что ему нужно, и это просто Visual Studio, сообщая вам об ошибке, которую вы можете просто добавить:

exit 0

в конце вашего сценария.

hakksor
источник
5
сокрытие любой потенциальной ошибки не должно быть
подходом
1
Я согласен, что это не должно быть замаскировано
AltF4_
5

Проверьте орфографию. Я пытался назвать исполняемый файл, но имя было написано с ошибкой, и это дало мне exited with code 9009сообщение.

отметка
источник
1
К этому добавьте проверку на наличие исполняемого файла в вашей системе вообще.
Джошуа Дрейк
5

В моем случае мне пришлось сначала «CD» (сменить каталог) в нужный каталог, прежде чем вызывать команду, поскольку вызываемый мной исполняемый файл находился в каталоге моего проекта.

Пример:

cd "$(SolutionDir)"
call "$(SolutionDir)build.bat"
Матиас Ликкегор Лоренцен
источник
1
Эта проблема решена , для меня работает Визуальный devenv.exe Студии, но вам не нужно указать папку во второй раз, just'call build.bat будет делать
FrinkTheBrave
4

Другой вариант:

сегодня я вызываю интерпретатор python из cron в win32 и беру ExitCode (% ERRORLEVEL%) 9009, потому что системная учетная запись, используемая cron, не имеет пути к каталогу Python.

Денис Барменков
источник
4

Проблема в моем случае произошла, когда я попытался использовать команду в командной строке для события Post-build в моей библиотеке классов тестирования. Когда вы используете кавычки, например, так:

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

или если вы используете консоль:

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

Это исправило проблему для меня.

pdvries
источник
4

Тфа ответ был отклонен, но на самом деле может вызвать эту проблему. Благодаря Hanzolo, я посмотрел в окне вывода и нашел следующее:

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.

После запуска npm install -g gulpя перестал получать эту ошибку. Если вы получаете эту ошибку в Visual Studio, проверьте окно вывода и посмотрите, является ли проблема неустановленной переменной среды.

Р. Солсбери
источник
3

Также убедитесь, что в окне редактирования событий после сборки в вашем проекте нет разрывов строк. Иногда копирование команды xcopy из Интернета, когда она многострочная, и вставка ее в VS, вызывает проблемы.

Джесси р
источник
Несмотря на то, что в jesse стоит отметить отсутствие разрывов строк в середине команды xcopy, обратите внимание, что в общем случае допустимо иметь разрывы строк в этом поле; каждая строка должна интерпретироваться как ее собственная команда.
RJFalconer
3

Я добавил «> myFile.txt» в конец строки на этапе предварительной сборки, а затем проверил файл на наличие ошибки.

Филипп
источник
2

Для меня дисковое пространство было мало, и файлы, которые не могли быть записаны, должны были появиться позже. В других ответах упоминались отсутствующие файлы (или файлы с неправильным именем / неправильной ссылкой по имени), но основной причиной была нехватка места на диске.

ErikE
источник
2

Для меня это произошло после обновления пакетов nuget с одной версии PostSharp до следующей в большом решении (проект ~ 80). У меня есть ошибки компилятора для проектов, которые имеют команды в событиях PreBuild.

«cmd» не распознается как внутренняя или внешняя команда, работающая программа или командный файл. C: \ Program Files (x86) \ MSBuild \ 14.0 \ bin \ Microsoft.Common.CurrentVersion.targets (1249,5): ошибка MSB3073: команда "cmd / c C: \ GitRepos \ main \ ServiceInterfaces \ DEV.Config \". PreBuild.cmd ServiceInterfaces "завершен с кодом 9009.

Переменная PATH была повреждена и стала слишком длинной с несколькими повторными путями, связанными с PostSharp.Patterns.Diagnostics. Когда я закрыл Visual Studio и открыл его снова, проблема была исправлена.

Майкл Фрейдгейм
источник
2

Еще один вариант файла не найден из-за пробелов в пути. В моем случае в скрипте msbuild. Мне нужно было использовать стиль HTML & quot; строки в команде 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

Так же, как и другие ответы, в моем случае это было из-за отсутствующего файла. Чтобы узнать, что это за отсутствующий файл, вы можете перейти к окну вывода, и оно сразу покажет вам, что пропало.

Чтобы открыть окно вывода в Visual Studio:

  1. Ctrl + Alt + O
  2. Вид> Вывод

введите описание изображения здесь

Марвин Гленн Лакуна
источник
2

Я исправил это, просто перезапустив Visual Studio - я только что запустился dotnet tool install xxxв окне консоли, а VS еще не выбрал новые переменные среды и / или параметры пути, которые были изменены, поэтому быстрый перезапуск решил проблему.

keithl8041
источник
1

Это довольно просто, у меня возникла эта проблема, и смутила простая ошибка.

Приложение использует аргументы командной строки, я удалил их, а затем добавил их обратно. Внезапно проект не удалось построить.

Visual Studio -> Свойства проекта -> убедитесь, что вы используете вкладку «Отладка» (не вкладка «События сборки») -> Аргументы командной строки

Я использовал текстовую область и Post / Pre-build, что было неправильно в этом случае.

Niike2
источник
1

Мое решение было просто: вы пытались выключить и снова включить его? Я перезагрузил компьютер, и проблема исчезла.

krzyszt0fd
источник
1

Я также столкнулся с этой 9009проблемой, когда столкнулся с ситуацией перезаписи.

В основном, если файл уже существует, и вы не указали /yпереключатель (который автоматически перезаписывает), эта ошибка может произойти при запуске из сборки.

Трэвис Вроман
источник
0

На самом деле я заметил, что по какой-то причине переменная окружения% windir% иногда стирается. Что мне помогло, так это переустановить переменную среды windir в c: \ windows, перезапустить VS, и все. Таким образом вы исключаете необходимость изменения файлов решения.

Чарльз Ф
источник
0

По крайней мере, в Visual Studio Ultimate 2013, версия 12.0.30723.00, обновление 3, невозможно отделить оператор if / else от разрыва строки:

работает:

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

не работает:

if '$(BuildingInsideVisualStudio)' == 'true' (echo local) 
else (echo server)
it-freelancer-magazin.de
источник
0

Еще одна причина: если ваше событие перед сборкой ссылается на путь к бину другого проекта, и вы видите эту ошибку при запуске msbuild, но не Visual Studio, то вам нужно вручную расположить проекты в файле * .sln (с текстовым редактором), чтобы что проект, на который вы нацеливаетесь в событии, построен перед проектом события. Другими словами, msbuild использует порядок, в котором проекты перечислены в файле * .sln, тогда как VS использует знания о зависимостях проекта. Это произошло, когда после wixproj был указан инструмент, который создает базу данных для включения в wixproj.

Novaterata
источник
0

Я думаю, что в моем случае в пути были русские символы (все проекты были в папке пользователя). Когда я положил решение в другую папку (прямо на диске), все стало хорошо.

Дмитрий Докшин
источник
0

Мое решение состояло в том, чтобы создать копию файла и добавить шаг в задачу сборки, чтобы скопировать мой файл поверх оригинала.

johnrizzo1
источник
0

Вы должны убедиться, что вы установили grunt глобально

TFA
источник