Những gì đã thoát ra với mã 9009 có nghĩa là gì trong quá trình xây dựng này?


292

Tin nhắn báo lỗi này có nghĩa là gì? Tôi có thể làm gì để khắc phục vấn đề này?

Hội nghịInfo.cs đã thoát với mã 9009


Vấn đề có thể xảy ra như là một phần của bước hậu xây dựng trong giải pháp .NET trong Visual Studio.


7
OP sẽ không quay lại để khắc phục vấn đề này, nhưng nó có rất nhiều câu trả lời và rất nhiều nước trái cây của Google. Vì vậy, hãy thử suy luận vấn đề?
Anthony Mastrean

13
Cửa sổ đầu ra cho tôi cái nhìn sâu sắc về vấn đề này mà tôi cũng đang gặp phải
hanzolo

Câu trả lời:


241

Bạn đã thử đưa ra đường dẫn đầy đủ của lệnh đang chạy trong lệnh sự kiện trước hoặc sau khi xây dựng chưa?

Tôi đã gặp lỗi 9009 do xcopylệnh sự kiện hậu xây dựng trong Visual Studio 2008.

Lệnh "xcopy.exe /Y C:\projectpath\project.config C:\compilepath\"đã thoát với mã 9009.

Nhưng trong trường hợp của tôi nó cũng không liên tục. Đó là, thông báo lỗi vẫn tồn tại cho đến khi khởi động lại máy tính và biến mất sau khi khởi động lại máy tính. Nó đã trở lại sau một số vấn đề liên quan từ xa mà tôi chưa khám phá.

Tuy nhiên, trong trường hợp của tôi, việc cung cấp lệnh với đường dẫn đầy đủ của nó đã giải quyết được vấn đề:

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

Thay vì chỉ:

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

Nếu tôi không có đường dẫn đầy đủ, nó sẽ chạy một lúc sau khi khởi động lại, rồi dừng lại.

Cũng như đã đề cập trên các bình luận cho bài đăng này, nếu có khoảng trắng trong đường dẫn đầy đủ, thì người ta cần có dấu ngoặc kép xung quanh lệnh . Ví dụ

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

Lưu ý rằng ví dụ này liên quan đến không gian không được kiểm tra.


44
Tôi cũng đã nhận được lỗi 9009 trên các sự kiện xây dựng bài và trước. Kiểm tra tab đầu ra trong Visual Studio cho thấy vấn đề. Trong trường hợp của tôi, tôi đã cố gắng truy cập vào một con đường chứa một khoảng trống
Phil Hale

16
Tôi đã có một vấn đề tương tự như vậy, nhưng đó là kết quả của khoảng trắng trong tên thư mục. Đặt các đường dẫn trong dấu ngoặc kép ( "$(SolutionDir)packages\NUnit.2.5.10.11092\tools\"nunit-console "$(TargetPath)") đã giải quyết nó.
Justin Morgan

1
Tôi đã gặp một vấn đề tương tự với một sự kiện tiền xây dựng đã sử dụng một applet Java để biên dịch trước JS và CSS ... hóa ra chúng tôi đã bỏ qua việc đưa Java Runtime lên máy chủ.
sốt

2
Có thể là PATHbiến môi trường bị mất bằng cách nào đó? Tôi nhận được lỗi này mỗi giờ và sau đó. Tôi đã npm installthiết lập như một sự kiện dựng sẵn và ban đầu nó hoạt động (vì vậy tôi cho rằng mọi thứ là thiết lập), nhưng sau đó ngẫu nhiên nó sẽ ngừng hoạt động trong ngày (nói chung là khi chuyển đổi giữa các giải pháp / chi nhánh tôi tin) và nó sẽ không còn nữa biết về npm. Khởi động lại VS 'sửa lỗi' nó ... có nghĩa là tôi PATHđang thiết lập chính xác, nhưng dường như đã đứng dậy bởi VS. Nếu có một cách để xem các biến env từ bên trong VS tôi có thể xác nhận điều này.
jamiebarrow

2
Nếu bạn muốn bảo vệ bản dựng của mình khỏi bị sập trong các môi trường khác nhau, giả sử, các cửa sổ được cài đặt trên D: \, hãy sử dụng các vars môi trường kết hợp với câu trả lời @thehhv:%systemroot%\System32\xcopy ...
Dorival

110

Mã lỗi 9009 có nghĩa là không tìm thấy tệp lỗi. Tất cả các lý do cơ bản được đăng trong các câu trả lời ở đây là nguồn cảm hứng tốt để tìm hiểu lý do tại sao, nhưng bản thân lỗi chỉ đơn giản là một con đường xấu.


1
Vấn đề của tôi với tệp không tìm thấy là tham chiếu trong tệp csproj là $ (PROGRAMFILES) \ Microsoft SDKs \ TypeScript \ tsc và phải là $ (PROGRAMFILES) \ Microsoft SDKs \ TypeScript \ 1.0 \ tsc
RHAD

Cảm ơn vì đã thực sự trả lời câu hỏi đầu tiên.
AntonK

Và nó có nghĩa là không tìm thấy bất kỳ tập tin nào mà lệnh đã thử có thể liên quan, do đó ngay cả khi nó không thể tìm thấy chính lệnh đó. Tôi đã sử dụng xóa thay vì del. Điều đó cũng sẽ cung cấp cho bạn 9009.
Mircea Ion

84

Nó xảy ra khi bạn thiếu một số cài đặt môi trường để sử dụng các công cụ Microsoft Visual Studio x86.
Do đó, hãy thử thêm dưới dạng một lệnh đầu tiên trong các bước xây dựng sau của bạn:

Đối với Visual Studio 2010 sử dụng:

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

Như @FlorianKoch đã đề cập trong các bình luận, cho VS 2017 sử dụng:

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

Nó nên được đặt trước bất kỳ lệnh nào khác.
Nó sẽ đặt môi trường để sử dụng các công cụ Microsoft Visual Studio x86.


3
Bạn có thể giúp tôi không - tôi phải thêm dòng call "$(DevEnvDir)..\Tools\vsvars32.bat"nào vào đâu và vào tập tin nào ? Cảm ơn
lướt web

2
Tôi đã phải thêm một mục vào Pathbiến môi trường của tôi . Kiểm tra cửa sổ đầu ra để biết thêm thông tin.
paqogomez

Chú ý. Điều này sẽ thất bại trên nhiều máy chủ xây dựng: blog.clariusconsulting.net/kzu/devenvdir-considered-harmful
George Mauer

2
Cảm ơn bạn, vì chuỗi công cụ x64 bit tôi đã giải quyết như vậy: "$ (DevEnvDir) .. \ VC \ vcvarsall.bat"
codekiddy

1
Đối với VS 2017, tập tin là"$(DevEnvDir)..\Tools\VsDevCmd.bat"
Florian Koch

57

Hầu hết có lẽ bạn có không gian trong đường dẫn kết quả của bạn.

Bạn có thể giải quyết vấn đề này bằng cách trích dẫn các đường dẫn, do đó cho phép khoảng trắng. Ví dụ:

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

9
+1 - Đây chính xác là vấn đề tôi gặp phải. Một lệnh trong quá trình xây dựng sau của tôi đã hoạt động khi tôi xây dựng dự án cục bộ, nhưng không thành công khi nó được xây dựng trên máy chủ xây dựng. Tôi chỉ đặt lệnh giữa dấu ngoặc kép để sửa nó. Cảm ơn.
sheikhjabootie

Vậy có hợp lý không khi suy đoán rằng lỗi 9009 là "không tìm thấy tệp" ..? Cá nhân, tôi nghĩ câu hỏi "MSBuild lỗi 9009 là gì?" nên hoàn toàn tốt đẹp như một câu hỏi độc lập, nhưng được chuyển đến Microsoft!
The Dag

11

Có cùng một biến sau khi thay đổi biến PATH từ Biến môi trường trong Win 7. Thay đổi trở lại mặc định đã giúp.


10

Tôi đã gặp lỗi 9009 khi tập lệnh sự kiện xây dựng bài đăng của tôi đang cố chạy một tệp bó không tồn tại trong đường dẫn được chỉ định.


6

Tôi đã gây ra lỗi này khi tôi xử lý lại biến môi trường Đường dẫn của mình. Sau khi chỉnh sửa, tôi vô tình thêm vào Path=đầu chuỗi đường dẫn. Với biến đường dẫn không đúng định dạng như vậy, tôi không thể chạy XCopy tại dòng lệnh (không tìm thấy lệnh hoặc tệp) và Visual Studio đã từ chối chạy bước xây dựng sau, trích dẫn lỗi với mã 9009.

XCopy thường nằm trong C: \ Windows \ System32. Khi biến môi trường Đường dẫn cho phép XCopy được giải quyết tại dấu nhắc DOS, Visual Studio đã xây dựng giải pháp của tôi rất tốt.


6

Lỗi chính xác của tôi là

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

9009 có nghĩa là không tìm thấy tệp, nhưng thực tế nó không thể tìm thấy phần "iscc" của lệnh.

Tôi đã sửa nó bằng cách thêm ";C:\Program Files\Inno Setup 5 (x86)\"vào biến môi trường hệ thống"path"


5

Nếu tập lệnh thực sự làm những gì nó cần làm và đó chỉ là Visual Studio làm phiền bạn về lỗi bạn có thể thêm vào:

exit 0

đến cuối tập lệnh của bạn.


5
ẩn bất kỳ lỗi tiềm ẩn nào không phải là cách để đi
igelineau

1
Tôi đồng ý điều này không nên bị che dấu
AltF4_

5

Kiểm tra chính tả. Tôi đã cố gắng gọi một thực thi nhưng có tên sai chính tả và nó đã cho tôi exited with code 9009tin nhắn.


1
Thêm vào đó, hãy kiểm tra sự tồn tại của tệp thực thi trên hệ thống của bạn.
Joshua Drake

5

Trong trường hợp của tôi, tôi phải "CD" (Thư mục thay đổi) vào thư mục thích hợp trước, trước khi gọi lệnh, vì lệnh thực thi mà tôi đang gọi nằm trong thư mục dự án của tôi.

Thí dụ:

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

1
Điều này đã khắc phục sự cố cho tôi khi chạy devenv.exe của Visual Studio, nhưng bạn không cần chỉ định thư mục lần thứ hai, chỉ cần xây dựng.bat sẽ làm
FrinkTheBrave

4

Một biến thể khác:

hôm nay tôi gọi trình thông dịch python từ cron trong win32 và lấy ExitCode (% ERRORLEVEL%) 9009, vì tài khoản hệ thống được sử dụng bởi cron không có đường dẫn đến thư mục Python.


4

Vấn đề trong trường hợp của tôi xảy ra khi tôi cố gắng sử dụng một lệnh trên dòng lệnh cho sự kiện Post-build trong Thư viện lớp thử nghiệm của tôi. Khi bạn sử dụng dấu ngoặc kép như vậy:

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

hoặc nếu bạn đang sử dụng bảng điều khiển:

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

Điều này đã khắc phục vấn đề cho tôi.


4

Câu trả lời của tfa đã bị hạ thấp, nhưng thực sự có thể gây ra vấn đề này. Nhờ hanzolo, tôi đã nhìn vào cửa sổ đầu ra và tìm thấy như sau:

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.

Sau khi chạy npm install -g gulp, tôi đã ngừng nhận được lỗi này. Nếu bạn gặp lỗi này trong Visual Studio, hãy kiểm tra cửa sổ đầu ra và xem vấn đề có phải là biến môi trường không được đặt.


3

Ngoài ra, hãy chắc chắn rằng không có ngắt dòng trong cửa sổ chỉnh sửa sự kiện xây dựng bài trong dự án của bạn. Đôi khi, sao chép lệnh xcopy từ web khi nó đa dòng và dán nó vào VS sẽ gây ra vấn đề.


Mặc dù jesse đưa ra một điểm tốt về việc không có ngắt dòng ở giữa lệnh xcopy, lưu ý rằng trong trường hợp chung, việc ngắt dòng trong trường này là hợp lệ; mỗi dòng nên được hiểu là lệnh riêng của nó.
RJFalconer

3

Tôi đã thêm "> myFile.txt" vào cuối dòng trong bước dựng trước và sau đó kiểm tra tệp để biết lỗi thực tế.


2

Đối với tôi, dung lượng ổ đĩa thấp và các tệp không thể ghi được dự kiến ​​sẽ xuất hiện sau. Các câu trả lời khác đề cập đến các tệp bị thiếu (hoặc tên sai / tệp được tham chiếu không đúng tên) - nhưng nguyên nhân gốc là thiếu không gian đĩa.


2

Đối với tôi, điều đó đã xảy ra sau khi nâng cấp các gói nuget từ một phiên bản PostSharp lên một gói tiếp theo trong một giải pháp lớn (dự án ~ 80). Tôi đã gặp lỗi trình biên dịch cho các dự án có lệnh trong các sự kiện PreBuild.

'cmd' không được nhận dạng như một lệnh nội bộ hoặc bên ngoài, chương trình có thể hoạt động hoặc tệp bó. C: \ Chương trình tệp (x86) \ MSBuild \ 14.0 \ bin \ Microsoft.Common.CienVersion.target (1249,5): lỗi MSB3073: Lệnh "cmd / c C: \ GitRepos \ main \ ServiceInterfaces \ DEV.Config \ PreBuild.cmd ServiceInterfaces "đã thoát với mã 9009.

Biến PATH bị hỏng quá lâu với nhiều đường dẫn lặp lại liên quan đến PostSharp.Potypes.Diagnostics. Khi tôi đóng Visual Studio và mở lại, sự cố đã được khắc phục.


2

Một biến thể khác của tập tin không được tìm thấy, bởi vì khoảng trắng trong đường dẫn. Trong trường hợp của tôi trong kịch bản msbuild. Tôi cần sử dụng kiểu HTML & quot; chuỗi trong lệnh 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

Giống như các câu trả lời khác, trong trường hợp của tôi là do tập tin bị thiếu. Để biết tập tin bị thiếu là gì, bạn có thể vào cửa sổ đầu ra và nó sẽ hiển thị ngay cho bạn những gì đã mất.

Để mở cửa sổ đầu ra trong Visual Studio:

  1. Ctrl + Alt + O
  2. Xem> Đầu ra

nhập mô tả hình ảnh ở đây


2

Tôi đã khắc phục điều này bằng cách khởi động lại Visual Studio - Tôi vừa chạy dotnet tool install xxxtrong cửa sổ giao diện điều khiển và VS vẫn chưa chọn các biến môi trường mới và / hoặc cài đặt đường dẫn đã bị thay đổi, vì vậy khởi động lại nhanh đã khắc phục sự cố.


1

Điều này là khá cơ bản, tôi đã có vấn đề này, và lúng túng đơn giản thất bại.

Ứng dụng sử dụng đối số dòng lệnh, tôi loại bỏ chúng và sau đó thêm chúng trở lại. Đột nhiên dự án không xây dựng được.

Visual Studio -> Thuộc tính dự án -> xác minh rằng bạn sử dụng tab 'Gỡ lỗi' (không phải tab 'Xây dựng sự kiện') -> Đối số dòng lệnh

Tôi đã sử dụng vùng văn bản và Post / Pre-build, đã sai trong trường hợp này.


1

Giải pháp của tôi chỉ đơn giản là: bạn đã thử tắt và bật lại chưa? Vì vậy, tôi khởi động lại máy tính và vấn đề đã biến mất.


1

Tôi cũng 9009gặp phải vấn đề này khi phải đối mặt với một tình huống ghi đè.

Về cơ bản, nếu tệp đã tồn tại và bạn chưa chỉ định công /ytắc (tự động ghi đè) thì lỗi này có thể xảy ra khi chạy từ bản dựng.


0

Trên thực tế tôi nhận thấy rằng vì một số lý do, biến môi trường% Windir% đôi khi bị xóa. Điều làm việc cho tôi là đặt lại biến môi trường Windir thành c: \ windows, khởi động lại VS và đó là nó. Bằng cách đó bạn ngăn chặn việc phải sửa đổi các tập tin giải pháp.


0

Ít nhất là trong Visual Studio Ultimate 2013, Phiên bản 12.0.30723.00 Cập nhật 3, không thể tách một câu lệnh if / other với dấu ngắt dòng:

làm:

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

không hoạt động:

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

0

Một lý do khác: Nếu sự kiện xây dựng trước của bạn tham chiếu đường dẫn bin dự án khác và bạn gặp lỗi này khi chạy msbuild, nhưng không phải Visual Studio, thì bạn phải sắp xếp thủ công các dự án trong tệp * .sln (với trình soạn thảo văn bản) rằng dự án bạn đang nhắm mục tiêu trong sự kiện được xây dựng trước dự án của sự kiện. Nói cách khác, msbuild sử dụng thứ tự các dự án được liệt kê trong tệp * .sln trong khi VS sử dụng kiến ​​thức về phụ thuộc dự án. Tôi đã có điều này xảy ra khi một công cụ tạo cơ sở dữ liệu được bao gồm trong wixproj được liệt kê sau wixproj.


0

Tôi nghĩ rằng trong trường hợp của tôi có các biểu tượng tiếng Nga trong đường dẫn (tất cả các dự án đều nằm trong thư mục người dùng). Khi tôi đặt giải pháp vào một thư mục khác (trực tiếp trên đĩa), mọi thứ đều ổn.


0

Giải pháp của tôi là tạo một bản sao của tệp và thêm một bước vào tác vụ xây dựng để sao chép tệp của tôi so với bản gốc.


0

Bạn cần chắc chắn rằng bạn đã cài đặt grunt trên toàn cầu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.