เหตุใดขั้นตอนหลังการสร้าง (xcopy) จึงออกเป็นครั้งคราวด้วยรหัส 2 ในการสร้าง TeamCity


94

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

xcopy [... ] ออกด้วยรหัส 2

ถ้าฉันใช้ปกติcopyมันจะออกด้วยรหัส 1 ฉันคาดว่าสิ่งนี้จะเกี่ยวข้องกับการล็อกไฟล์แม้ว่าไฟล์ที่คัดลอกจะไม่เหมือนกันดังนั้นอาจจะแค่ล็อกไดเรกทอรีปลายทางที่แชร์ ฉันใช้/yเพื่อไม่แจ้งเกี่ยวกับการเขียนทับไฟล์

เหตุใดจึงล้มเหลวใน TeamCity แต่ไม่ใช่ในเครื่อง


ฉันมีปัญหาที่คล้ายกัน แต่เกี่ยวข้องกับการคัดลอกไฟล์เดียวกันแบบขนานพร้อมกัน คุณช่วยตรวจสอบอีกครั้งได้ไหมว่าไม่มีการคัดลอกไฟล์สองครั้ง
Ignacio Soler Garcia

5
รหัสทางออกที่ 2 The user pressed CTRL+C to terminate xcopyหมายถึง ฮิฮิ.
Hans Passant

@SoMoS ใช่ไฟล์ที่ถูกคัดลอกมีความแตกต่างอย่างแน่นอน
Tim Iles

@HansPassant ฉันไม่รู้ว่าทำไม teamcity ถึงอยากกด CTRL + C ใส่ฉัน! :(
Tim Iles

5
ใช่ฉันก็ไม่เหมือนกัน หลักการทั่วไปอื่น ๆ คือรหัสออกเท่ากับข้อผิดพลาดหรือข้อยกเว้นของ Windows ล่าสุด ข้อผิดพลาด 2 หมายถึง "ไม่พบไฟล์" ซึ่งแน่นอนว่าสมเหตุสมผลกว่ามาก
Hans Passant

คำตอบ:


149

แม้ว่าคุณจะระบุ/Yสวิตช์ด้วย xcopy คุณจะยังคงได้รับข้อผิดพลาดเมื่อ xcopy ไม่ทราบว่าสิ่งที่คุณกำลังคัดลอกเป็นไฟล์หรือไดเร็กทอรี ข้อผิดพลาดนี้จะปรากฏเป็น "ออกด้วยรหัส 2" เมื่อคุณเรียกใช้ xcopy เดียวกันที่พรอมต์คำสั่งคุณจะเห็นว่า xcopy กำลังขอการตอบสนองของไฟล์หรือไดเร็กทอรี

ในการแก้ไขปัญหานี้ด้วยบิลด์อัตโนมัติคุณสามารถสะท้อนในการตอบสนองที่กำหนดไว้ล่วงหน้าด้วยไพพ์

หากต้องการบอกว่าสิ่งที่คุณกำลังคัดลอกคือไฟล์ให้ echo F:

echo F|xcopy /y ...

หากต้องการบอกว่าสิ่งที่คุณกำลังคัดลอกคือไดเร็กทอรีให้ echo ในD:

echo D|xcopy /y ...

บางครั้งข้างต้นสามารถแก้ไขได้โดยใช้คำสั่ง copy แทน xcopy:

copy /y ...

อย่างไรก็ตามหากมีไดเร็กทอรีที่ไม่มีอยู่ซึ่งนำไปสู่ปลายทางของไฟล์สุดท้ายจะเกิด "ออกด้วยรหัส 1"

ข้อควรจำ: ใช้/Cสวิตช์และ xcopy ด้วยความระมัดระวัง


ขอบคุณ @Metro Smurf ฉันไม่สามารถทดสอบได้ว่าสิ่งนี้จะช่วยแก้ปัญหาของฉันได้หรือไม่ แต่สิ่งที่คุณพูดฟังดูฉลาดฉันจึงทำเครื่องหมายว่าเป็นคำตอบ ไชโย!
Tim Iles

ฉันพบปัญหาเดียวกันและท้ายที่สุดก็จบลงด้วยการส่งต่อในการตอบสนอง หวังว่าสิ่งนี้จะช่วยคนอื่นได้ในระยะยาว
Metro Smurf

1
"สิ่งนี้ใช้ไม่ได้กับ Windows เวอร์ชันที่แปลเป็นภาษาท้องถิ่นซึ่งคำที่พร้อมท์อาจแตกต่างออกไปเคล็ดลับทางเลือกคือการเพิ่มเครื่องหมายดอกจัน ' ' ที่ส่วนท้ายของปลายทางจากนั้น xcopy จะไม่แสดงข้อความสำหรับไฟล์ / ไดเรกทอรี - Govert ม.ค. 28 เวลา 19:40 "ดังนั้นคุณสามารถทำสำเนาแบบนี้ได้โดยไม่ต้องใช้ echo D (ซึ่งไม่น่าเชื่อถือ): XCOPY $ (ProjectDir) .. \ scripts * $ (TargetDir) scripts * / Y / R หรือทำสำเนาแบบนี้โดยไม่มีเสียงสะท้อน F: XCOPY D: \ file.zip c: \ renamedFile.zip / Y / R
leetNightshade

@leetNightshade - จะ*ทำงานร่วมกับไดเรกทอรีด้วยหรือไม่ หรือนี่เป็นเพียงไฟล์?
Metro Smurf

@MetroSmurf อืมดูเหมือนว่าการจัดรูปแบบของตัวอย่างของฉันล้มเหลวมีแบ็กสแลชหายไป (คงคิดว่าฉันพยายามหลบหนีสัญลักษณ์) และไม่มีเครื่องหมายดอกจัน แต่ใช่มันใช้งานได้กับไดเรกทอรีและไฟล์ นี่คือลิงค์ไปยังคำตอบของ Govert: stackoverflow.com/a/14022309/353094
leetNightshade

37

ฉันแก้ไขรหัสข้อผิดพลาด 2 โดยการเพิ่ม \ ที่ท้ายเส้นทางของฉันหากไม่มี xcopy จะคิดว่าเป็นไฟล์แทนที่จะเป็นโฟลเดอร์


3
แค่นั้นแหละ. ทำงานได้ดีบน Windows 7, Visual Studio 2013 ขอบคุณมาก!
Charles

33

หากคุณใช้ xcopy ในเหตุการณ์สร้างโพสต์ให้ใช้สวิตช์ / Y นอกเหนือจาก / C

/C           Continues copying even if errors occur.
/Y           Suppresses prompting to confirm you want to overwrite an existing file.

4
ง่ายมาก! /Yระงับการแจ้งเตือน! ทำไมถึงหายากจัง
SouthShoreAK

3
/ Y ไม่ระงับการเขียนทับพร้อมต์ แต่นั่นไม่ใช่เหตุผลเดียวสำหรับโค้ด 2 RTFM จะไม่บอกคุณว่าอะไรเป็นสาเหตุ
MSalters

2

การแก้ไขของฉันสำหรับปัญหานี้คือเข้าไปในโฟลเดอร์ bin เป้าหมายและตรวจสอบให้แน่ใจว่ามีโฟลเดอร์ย่อยที่เหมาะสมอยู่ที่นั่น เมื่อสร้างโฟลเดอร์ย่อยด้วยตนเองแล้วกระบวนการสร้างจะเสร็จสมบูรณ์


2

copyแก้ไขให้ฉัน xcopy with /c /yไม่ทำงาน. ผมได้รับการออก 4 ดังนั้นฉันไปด้วยแต่เปิดออกผมจำเป็นต้องมีคำพูดรอบxcopy($TargetPath)

สคริปต์ของฉัน:

if $(ConfigurationName) == Debug copy "$(TargetPath)" "$(SolutionDir)\Folder\bin\Debug\$(TargetFileName)"

2

คุณอาจใช้ TeamCity กับคอมไพล์ ถ้าใช่ให้ตรวจสอบว่ามีโฟลเดอร์ที่คุณต้องการคัดลอกอยู่ในที่เก็บ git โดยปกติ git aviod จะเพิ่มโฟลเดอร์โปรเจ็กต์ว่างลงในที่เก็บดังนั้นจึงxcopyไม่สามารถค้นหาได้และสร้างข้อผิดพลาด

คุณสามารถเพิ่มไฟล์ข้อความเปล่าลงในโฟลเดอร์ว่างผูกมัดและดูโฟลเดอร์ปรากฏในที่เก็บ

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