“ ออกจากด้วยรหัส 9009” หมายความว่าอะไรในระหว่างการสร้างนี้


292

ข้อความแสดงข้อผิดพลาดนี้หมายความว่าอย่างไร ฉันจะทำอย่างไรเพื่อแก้ไขปัญหานี้

AssemblyInfo.cs ออกจากด้วยรหัส 9009


ปัญหาอาจเกิดขึ้นเป็นส่วนหนึ่งของขั้นตอนหลังการสร้างในโซลูชัน. NET ใน Visual Studio


7
OP ไม่ได้กลับมาเพื่อแก้ไขปัญหานี้ แต่มีคำตอบมากมายและน้ำผลไม้ของ Google มากมาย งั้นลองมาสรุปปัญหากันดีกว่า
Anthony Mastrean

13
หน้าต่างผลลัพธ์ให้ข้อมูลเชิงลึกแก่ฉันเกี่ยวกับปัญหานี้ซึ่งฉันเองก็มี
hanzolo

คำตอบ:


241

คุณพยายามที่จะให้เส้นทางแบบเต็มของคำสั่งที่ใช้ในคำสั่ง pre-or post-build event หรือไม่?

ฉันได้รับข้อผิดพลาด 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 แสดงปัญหา ในกรณีของฉันฉันพยายามเข้าถึงเส้นทางที่มีช่องว่าง
Phil Hale

16
ฉันมีปัญหาที่คล้ายกันนี้ แต่มันเป็นผลมาจากช่องว่างในชื่อโฟลเดอร์ ใส่เส้นทางในเครื่องหมายคำพูด ( "$(SolutionDir)packages\NUnit.2.5.10.11092\tools\"nunit-console "$(TargetPath)") แก้ไขมัน
Justin Morgan

1
ฉันพบปัญหาที่คล้ายกันกับเหตุการณ์ที่สร้างล่วงหน้าซึ่งใช้แอปเพล็ต Java เพื่อรวบรวม JS และ CSS ล่วงหน้า ... ปรากฎว่าเราละเลยที่จะใส่ Java Runtime บนเซิร์ฟเวอร์
saluce

2
เป็นไปได้ว่าPATHตัวแปรสภาพแวดล้อมจะหายไปอย่างใด? ฉันได้รับข้อผิดพลาดนี้ทุกครั้งแล้ว ฉันมีnpm installการตั้งค่าเป็นเหตุการณ์ที่สร้างไว้ล่วงหน้าและเริ่มแรกใช้งานได้ (ดังนั้นฉันจึงสันนิษฐานว่าทุกอย่างเป็นการตั้งค่า) แต่จากนั้นการสุ่มจะหยุดทำงานในระหว่างวัน (โดยทั่วไปเมื่อเปลี่ยนระหว่างโซลูชัน / สาขาที่ฉันเชื่อ) และจะไม่ npmรู้เกี่ยวกับ การรีสตาร์ท VS 'แก้ไข' มัน ... หมายถึงฉันPATHตั้งค่าไว้ถูกต้อง แต่ดูเหมือนว่าจะลุกขึ้นโดย VS หากมีวิธีการดูตัวแปร env จากภายใน VS ฉันสามารถยืนยันได้
jamiebarrow

2
หากคุณต้องการปกป้องงานสร้างของคุณจากการทำงานล้มเหลวในสภาพแวดล้อมที่แตกต่างกันสมมติว่า windows ที่ติดตั้งบน D: \ ใช้ vars ของสภาพแวดล้อมร่วมกับ @thehhv answer:%systemroot%\System32\xcopy ...
Dorival

110

รหัสข้อผิดพลาด 9009 หมายถึงไม่พบไฟล์ข้อผิดพลาด เหตุผลพื้นฐานทั้งหมดที่โพสต์ในคำตอบที่นี่เป็นแรงบันดาลใจที่ดีในการหาสาเหตุ แต่ความผิดพลาดเองนั้นหมายถึงเส้นทางที่ไม่ดี


1
ปัญหาของฉันกับไฟล์ไม่พบคือการอ้างอิงในไฟล์ csproj คือ $ (PROGRAMFILES) \ Microsoft SDKs \ TypeScript \ tsc และต้องเป็น $ (PROGRAMFILES) \ Microsoft SDKs \ TypeScript \ 1.0 \ tsc
RHAD

ขอบคุณที่ตอบคำถามแรกจริง ๆ
AntonK

และมันหมายถึงการไม่ค้นหาไฟล์ใด ๆ ที่คำสั่งพยายามทำอาจเกี่ยวข้องดังนั้นแม้เมื่อไม่สามารถหาคำสั่งได้ ฉันใช้การลบแทนการใช้เดล นั่นจะทำให้คุณมี 9009 เช่นกัน
Mircea Ion

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"? ขอบคุณ
surfmuggle

2
ฉันต้องเพิ่มรายการในPathตัวแปรสภาพแวดล้อมของฉัน ตรวจสอบหน้าต่างเอาต์พุตสำหรับข้อมูลเพิ่มเติม
paqogomez

ความระมัดระวัง สิ่งนี้จะล้มเหลวในการสร้างเซิร์ฟเวอร์จำนวนมาก: blogs.clariusconsulting.net/kzu/devenvdir-considered-harmful
George Mauer

2
ขอบคุณสำหรับเครื่องมือ x64 บิตฉันแก้ไขได้เช่น: "$ (DevEnvDir) .. \ VC \
vcvarsall.bat

1
สำหรับ VS 2017 ไฟล์คือ"$(DevEnvDir)..\Tools\VsDevCmd.bat"
Florian Koch

57

ส่วนใหญ่คุณอาจมีที่ว่างในเส้นทางผลลัพธ์ของคุณ

คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยการอ้างอิงเส้นทางจึงอนุญาตให้มีช่องว่าง ตัวอย่างเช่น:

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

9
+1 - นี่คือปัญหาที่ฉันมี คำสั่งใน post-build ของฉันทำงานเมื่อฉันสร้างโครงการในเครื่อง แต่ล้มเหลวเมื่อสร้างขึ้นบนเซิร์ฟเวอร์การสร้าง ฉันเพิ่งวางคำสั่งระหว่างเครื่องหมายคำพูดคู่เพื่อแก้ไข ขอบคุณ
sheikhjabootie

ดังนั้นจึงมีเหตุผลที่จะคาดเดาข้อผิดพลาดที่ 9009 คือ "file not found" .. ? โดยส่วนตัวฉันคิดว่าคำถาม "MSBuild error 9009 คืออะไร" ควรจะดีอย่างสมบูรณ์แบบเป็นคำถามแบบสแตนด์อโลน แต่ตรงไปที่ Microsoft!
Dag

11

มีตัวแปรเดียวกันหลังจากเปลี่ยนตัวแปร PATH จากตัวแปรสภาพแวดล้อมใน Win 7 การเปลี่ยนกลับไปเป็นค่าเริ่มต้นช่วย


10

ฉันมีข้อผิดพลาด 9009 เมื่อสคริปต์เหตุการณ์สร้างโพสต์ของฉันพยายามเรียกใช้ไฟล์แบตช์ที่ไม่มีอยู่ในเส้นทางที่ระบุ


6

ฉันทำให้ข้อผิดพลาดนี้เกิดขึ้นเมื่อฉันแก้ไขตัวแปรสภาพแวดล้อม Path อีกครั้ง หลังจากแก้ไขฉันตั้งใจเพิ่มPath=จุดเริ่มต้นของสตริงเส้นทาง ด้วยตัวแปรพา ธ ที่ผิดรูปแบบฉันไม่สามารถเรียกใช้ XCopy ที่บรรทัดคำสั่ง (ไม่พบคำสั่งหรือไฟล์) และ Visual Studio ปฏิเสธที่จะเรียกใช้ขั้นตอนหลังการสร้างโดยอ้างถึงข้อผิดพลาดด้วยรหัส 9009

โดยทั่วไป XCopy จะอยู่ใน C: \ Windows \ System32 เมื่อตัวแปรสภาพแวดล้อม Path อนุญาตให้ XCopy แก้ไขได้ที่ DOS prompt 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 bugging คุณเกี่ยวกับข้อผิดพลาดที่คุณสามารถเพิ่ม:

exit 0

ถึงจุดสิ้นสุดของสคริปต์ของคุณ


5
การซ่อนข้อผิดพลาดที่อาจเกิดขึ้นไม่ควรเป็นหนทางไป
igelineau

1
ฉันเห็นด้วยไม่ควรสวมหน้ากาก
AltF4_

5

ตรวจสอบการสะกดคำ ฉันพยายามเรียกใช้ไฟล์ปฏิบัติการ แต่มีชื่อที่สะกดผิดและทำให้ฉันมีexited with code 9009ข้อความ


1
เพื่อที่จะเพิ่มการตรวจสอบสำหรับการดำรงอยู่ของปฏิบัติการบนระบบของคุณเลย
Joshua Drake

5

ในกรณีของฉันฉันต้อง "CD" (Change Directory) ไปยังไดเรกทอรีที่เหมาะสมก่อนที่จะเรียกคำสั่งเนื่องจากปฏิบัติการที่ฉันเรียกอยู่ในไดเรกทอรีโครงการของฉัน

ตัวอย่าง:

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

1
วิธีนี้แก้ไขปัญหาสำหรับฉันที่เรียกใช้ devenv.exe ของ Visual Studio แต่คุณไม่จำเป็นต้องระบุโฟลเดอร์ในครั้งที่สอง just'call build.bat จะทำ
FrinkTheBrave

4

ตัวแปรอื่น:

วันนี้ฉันเรียกล่ามไพ ธ อนจาก cron ใน win32 และใช้ ExitCode (% ERRORLEVEL%) 9009 เพราะบัญชีระบบที่ cron ใช้ไม่มีเส้นทางไปยังไดเรกทอรี Python


4

ปัญหาในกรณีของฉันเกิดขึ้นเมื่อฉันพยายามใช้คำสั่งในบรรทัดคำสั่งสำหรับเหตุการณ์หลังการสร้างในไลบรารีคลาสการทดสอบของฉัน เมื่อคุณใช้เครื่องหมายคำพูดเช่นนั้น:

"$(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 จะทำให้เกิดปัญหา


ถึงแม้ว่าเจสซี่จะให้คะแนนที่ดีเกี่ยวกับการไม่มีการขึ้นบรรทัดใหม่ในช่วงกลางของคำสั่ง xcopy โปรดทราบว่าในกรณีทั่วไปการใช้การแบ่งบรรทัดในฟิลด์นี้จะใช้ได้ แต่ละบรรทัดควรตีความว่าเป็นคำสั่งของตัวเอง
RJFalconer

3

ฉันเพิ่ม "> myFile.txt" ไปยังจุดสิ้นสุดของบรรทัดในขั้นตอนการสร้างล่วงหน้าจากนั้นตรวจสอบไฟล์สำหรับข้อผิดพลาดจริง


2

สำหรับฉันพื้นที่ดิสก์เหลือน้อยและไฟล์ที่ไม่สามารถเขียนได้คาดว่าจะมีอยู่ในภายหลัง คำตอบอื่น ๆ ที่กล่าวถึงไฟล์ที่หายไป (หรือไฟล์ที่มีชื่อ / อ้างอิงผิด) - แต่สาเหตุที่แท้จริงคือพื้นที่ดิสก์ไม่เพียงพอ


2

สำหรับฉันมันเกิดขึ้นหลังจากการอัพเกรดแพ็คเกจ nuget จากรุ่น PostSharp หนึ่งไปสู่อีกอันในโซลูชันขนาดใหญ่ (ประมาณ 80 โครงการ) ฉันมีข้อผิดพลาดของคอมไพเลอร์สำหรับโครงการที่มีคำสั่งในเหตุการณ์ PreBuild

'cmd' ไม่รู้จักว่าเป็นคำสั่งภายในหรือภายนอก, โปรแกรมที่ทำงานได้หรือไฟล์แบตช์ C: \ Program Files (x86) \ MSBuild \ 14.0 \ bin \ Microsoft.CommV.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 ยังไม่ได้เลือกตัวแปรสภาพแวดล้อมใหม่และ / หรือการตั้งค่าเส้นทางที่เปลี่ยนแปลงไปดังนั้นการรีสตาร์ทอย่างรวดเร็วจึงแก้ไขปัญหาได้


1

นี่เป็นพื้นฐานที่ค่อนข้างฉันมีปัญหานี้และล้มเหลวง่าย ๆ ที่น่าอาย

แอปพลิเคชันใช้อาร์กิวเมนต์บรรทัดคำสั่งฉันลบออกแล้วเพิ่มกลับ ทันใดนั้นโครงการไม่สามารถสร้างได้

Visual Studio -> Properties Project -> ตรวจสอบว่าคุณใช้แท็บ 'Debug' (ไม่ใช่แท็บ 'Build Events') -> อาร์กิวเมนต์บรรทัดคำสั่ง

ฉันใช้และพื้นที่ข้อความ Post / Pre-build ซึ่งผิดในกรณีนี้


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

อีกเหตุผลหนึ่ง: หากเหตุการณ์ก่อนสร้างของคุณอ้างอิงพา ธ bin ของโปรเจ็กต์อื่นและคุณเห็นข้อผิดพลาดนี้เมื่อรัน msbuild แต่ไม่ใช่ Visual Studio คุณจะต้องจัดโปรเจ็กต์ด้วยตนเองในไฟล์ * .sln (ด้วยโปรแกรมแก้ไขข้อความ) ว่าโครงการที่คุณกำหนดเป้าหมายในเหตุการณ์นั้นสร้างขึ้นก่อนโครงการของกิจกรรม กล่าวอีกนัยหนึ่ง msbuild ใช้ลำดับที่โปรเจ็กต์แสดงรายการในไฟล์ * .sln ในขณะที่ VS ใช้ความรู้เกี่ยวกับการขึ้นต่อกันของโครงการ ฉันเกิดสิ่งนี้ขึ้นเมื่อเครื่องมือที่สร้างฐานข้อมูลที่จะรวมอยู่ใน wixproj ถูกแสดงรายการหลังจาก wixproj


0

ฉันคิดว่าในกรณีของฉันมีสัญลักษณ์รัสเซียในเส้นทาง (โครงการทั้งหมดอยู่ในโฟลเดอร์ผู้ใช้) เมื่อฉันใส่โซลูชันในโฟลเดอร์อื่น (บนดิสก์โดยตรง) ทุกอย่างก็โอเค


0

ทางออกของฉันคือการสร้างสำเนาของไฟล์และเพิ่มขั้นตอนในงานสร้างเพื่อคัดลอกไฟล์ของฉันไปที่ต้นฉบับ


0

คุณต้องตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งเสียงฮึดฮัดทั่วโลก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.