Що означає "вийшов із кодом 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\

Зауважте, що цей приклад щодо пробілів не перевіряється.


44
Я також отримав помилку 9009 у подіях після і попереднього збирання. Перевірка вкладки Вихід у Visual Studio показує проблему. У моєму випадку я намагався пройти шлях, що містить пробіл
— Філ Хейл

16
У мене була схожа проблема з цією, але вона була результатом пробілів у назвах папок. Поставивши шляхи в лапки ( "$(SolutionDir)packages\NUnit.2.5.10.11092\tools\"nunit-console "$(TargetPath)"), це вирішило.
— Джастін Морган

1
Я зіткнувся з подібною проблемою з подією перед збіркою, яка використовувала аплет Java для попередньої компіляції JS та CSS ... виявляється, ми знехтували ставити Java Runtime на сервер.
— салюс

2
Чи можливо, що PATHзмінна середовища якось загубиться? Я отримую цю помилку раз у раз. У мене npm installналаштування як подія перед збіркою, і спочатку вона працює (тому я припускаю, що все налаштовано), але потім випадковим чином вона перестане працювати протягом дня (як правило, при переключенні між рішеннями / гілками, я вважаю), і більше не буде знати про npm. Перезапуск VS "виправляє" це ... значить, моє PATHналаштування правильно, але, схоже, встає VS. Якби був спосіб перегляду змінних env зсередини VS, я міг би це підтвердити.
— jamiebarrow

2
Якщо ви хочете захистити свою збірку від збоїв у різних середовищах, скажімо, Windows, встановлені на D: \, використовуйте параметри середовища в поєднанні з відповіддю @thehhv:%systemroot%\System32\xcopy ...
— Dorival

110

Код помилки 9009 означає, що файл помилки не знайдено. Усі основні причини, розміщені у відповідях тут, є гарним натхненням з’ясувати, чому, але сама помилка просто означає поганий шлях.


1
Моя проблема з файлом не знайдена: посилання у файлі csproj було $ (PROGRAMFILES) \ Microsoft SDKs \ TypeScript \ tsc і повинно бути $ (PROGRAMFILES) \ Microsoft SDKs \ TypeScript \ 1.0 \ tsc
— RHAD

Дякуємо, що реально відповіли на перше запитання.
— AntonK

А це означає, що не знайти жодного файлу, до якого може бути залучена спроба, тому навіть коли вона не змогла знайти саму команду. Я використовував delete замість 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.


3
Не могли б ви допомогти мені - де і в який файл я повинен додати рядок call "$(DevEnvDir)..\Tools\vsvars32.bat"? Спасибі
— прибій

2
Мені довелося додати запис до моєї Pathзмінної середовища. Перевірте вікно виводу для отримання додаткової інформації.
— paqogomez

Обережність. Це не вдасться на багатьох серверах побудови: 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

9
+1 - Це саме та проблема, яку я мав. Команда в моєму post-build працювала, коли я будував проект локально, але не вдався, коли він був побудований на сервері збірки. Я просто розмістив команду між подвійними лапками, щоб виправити її. Дякую.
— sheikhjabootie

Тож чи розумно міркувати, що помилка 9009 - це "файл не знайдено" ..? Особисто я думаю, що питання "що таке помилка MSBuild 9009?" має бути ідеально відмінним як окреме питання, але направлене на Microsoft!
— Даг

11

Була така ж змінна після зміни змінної PATH з Environmental Variables у Win 7. Повернення до стандартних допомогло.


10

У мене виникла помилка 9009, коли мій сценарій події після складання намагався запустити пакетний файл, який не існував у вказаному шляху.


6

Я спричинив цю помилку під час редагування змінної середовища Path. Після редагування я випадково додавPath= на початок рядка шляху. З такою неправильною змінною контуру я не зміг запустити XCopy в командному рядку (жодної команди чи файлу не знайдено), і Visual Studio відмовився запускати крок після складання, посилаючись на помилку з кодом 9009.

XCopy зазвичай проживає в C: \ Windows \ System32. Після того, як змінна середовища Path дозволила XCopy вирішитись у запиті DOS, Visual Studio добре розробив моє рішення.


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"


5

Якщо сценарій насправді робить те, що йому потрібно зробити, і це просто Visual Studio клопоче про помилку, яку ви можете просто додати:

exit 0

до кінця вашого сценарію.


5
приховувати будь-яку потенційну помилку не слід шляхом
— igelineau

1
Я згоден, це не слід маскувати
— AltF4_

5

Перевірте правопис. Я намагався викликати виконуваний файл, але ім'я було написано неправильно, і це дало мені exited with code 9009повідомлення.


1
До цього додайте перевірку на наявність виконуваного файлу у вашій системі взагалі.
— Джошуа Дрейк

5

У моєму випадку я повинен був "CD" (Change Directory) у відповідний каталог, перш ніж викликати команду, оскільки виконуваний файл, який я дзвонив, знаходився в моєму каталозі проектів.

Приклад:

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

1
Це вирішило проблему для мене під керуванням devenv.exe Visual Studio, але вам не потрібно вказувати папку вдруге, зробить 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)"

Це вирішило для мене проблему.


4

Відповідь tfa була оскаржена, але насправді це може спричинити це питання. Завдяки 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

Для мене місце на диску мало, і файли, які не вдалося записати, очікувались, що вони будуть представлені пізніше. Інші відповіді згадували про відсутні файли (або неправильно названі / неправильно посилаються на ім’я файли) - але першопричиною була відсутність місця на диску.


2

Для мене це сталося після оновлення пакетів нута з однієї версії PostSharp до наступної у великому рішенні (~ 80 проект). У мене є помилки компілятора для проектів, які мають команди в подіях PreBuild.

'cmd' не розпізнається як внутрішня чи зовнішня команда, функціонуюча програма чи пакетний файл. C: \ Program Files (x86) \ MSBuild \ 14.0 \ bin \ Microsoft.Common.CurrentVersion.targets (1249,5): error 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 ще не підібрав нові змінні середовища та / або налаштування шляху, які були змінені, тому швидкий перезапуск усунув проблему.


1

Це досить елементарно, у мене була ця проблема, і бентежить простий провал.

Використання програми аргументи командного рядка, я видалив їх, а потім додав їх назад. Раптом проект не вдалося розробити.

Visual Studio -> Властивості проекту -> переконайтеся, що ви використовуєте вкладку "Налагодження" (а не вкладку "Події побудови") -> Аргументи командного рядка

Я використав текстову область "Пост / попереднє складання", що було неправильним у цьому випадку.


1

Моє рішення було просто: як ви намагалися вимкнути його і знову ввімкнути? Тому я перезапустив комп’ютер, і проблеми не було.


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)

0

Ще одна причина: Якщо ваша подія перед збіркою посилається на інший шлях бін проектів, і ви бачите цю помилку під час запуску msbuild, але не Visual Studio, вам доведеться вручну упорядкувати проекти у файлі * .sln (з текстовим редактором) так що проект, на який ви орієнтуєтесь у події, будується перед проектом події. Іншими словами, msbuild використовує порядок того, що проекти перелічені у файлі * .sln, тоді як VS використовує знання про залежність проекту. У мене це сталося, коли після wixproj був перерахований інструмент, який створює базу даних для включення до wixproj.


0

Я думаю, що в моєму випадку на шляху були російські символи (усі проекти були в папці користувача). Коли я помістив рішення в іншу папку (безпосередньо на диску), все стало нормально.


0

Моє рішення полягало в тому, щоб створити копію файлу і додати крок до завдання збірки, щоб скопіювати мій файл над оригіналом.


0

Вам потрібно переконатися, що ви встановили грунт в усьому світі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.