msbuild.exe ยังคงเปิดอยู่กำลังล็อกไฟล์


99

ฉันใช้ TeamCity ซึ่งจะเรียกใช้ msbuild (.NET 4) ฉันมีปัญหาแปลก ๆ หลังจากการสร้างเสร็จสมบูรณ์ (และดูเหมือนจะไม่สำคัญว่าจะเป็นงานสร้างที่ประสบความสำเร็จหรือไม่) msbuild.exe จะยังคงเปิดอยู่และล็อกไฟล์ใดไฟล์หนึ่งซึ่งหมายความว่าทุกครั้งที่ TeamCity พยายาม เพื่อล้างไดเร็กทอรีงานล้มเหลวและไม่สามารถดำเนินการต่อได้

สิ่งนี้เกิดขึ้นเกือบทุกครั้ง

ฉันหลงทางกับเรื่องนี้จริงๆดังนั้นฉันจะพยายามให้รายละเอียดให้มากที่สุด

  • เซิร์ฟเวอร์เป็น Intel Core i7 แรม 2 GB พร้อม Windows Server 2008 64-bit SP2 มาตรฐาน
  • ใน TeamCity ตัววิ่ง msbuild ถูกกำหนดค่าด้วย/mพารามิเตอร์บรรทัดคำสั่ง (ซึ่งหมายถึงการใช้หลายคอร์)
  • แฟ้มในคำถามคือเสมอ DLL ที่ภายนอกเช่นเดียวกับที่มีการอ้างอิงในหนึ่งในโครงการ .NET External Tools\Telerik\Telerik.Reporting.Dllในเส้นทาง (มีไฟล์. DLL อื่น ๆ อีกหลายไฟล์ที่รวมอยู่ในExternal Toolsdir ในโครงสร้างพา ธ ที่คล้ายกันซึ่งไม่เคยทำให้เกิดปัญหานี้) ขณะนี้อยู่ในรายงาน Telerik รุ่นทดลองในกรณีที่สร้างความแตกต่าง
  • เมื่อปัญหาเกิดขึ้นจะมีmsbuild.exe *32กระบวนการหลายอย่างที่ระบุไว้ในตัวจัดการงาน: ฉันเชื่อว่ามี 7 ขั้นตอนการใช้ Process Explorer ทุกอย่างดูเหมือนกระบวนการระดับบนสุด ทั้งหมดนี้ใช้ RAM 20-50MB และ CPU 0.0%
  • ถ้าฉันรอ 1-3 นาที msbuild.exe จะดำเนินการออกเองจากนั้น TeamCity จะสามารถอัปเดตไดเร็กทอรีงานได้อย่างถูกต้อง
  • หากฉันยุติกระบวนการ msbuild ด้วยตนเองการอัปเดตของ TeamCity จะทำงานอีกครั้งทันที
  • บริการจัดทำดัชนีถูกปิดใน Windows (แม้ว่าสองจุดก่อนหน้านี้ค่อนข้างยืนยันว่าเป็น msbuild.exe ที่ทำให้เกิดปัญหา)
  • ไม่มีคุณสมบัติพิเศษบน Telerik.reporting.dll คุณสมบัติ SVN เดียวคือsvn:mime-type = application/octet-stream

มีใครวิ่งข้ามสิ่งนี้มาก่อนหรือไม่?

คำตอบ:


125

ใช้msbuildกับ/nr:false.

โดยสังเขป: MSBuild พยายามทำหลายสิ่งเพื่อให้รวดเร็วโดยเฉพาะอย่างยิ่งกับงานสร้างแบบขนาน มันจะสร้าง "โหนด" จำนวนมาก - กระบวนการ msbuild.exe แต่ละรายการที่สามารถรวบรวมโปรเจ็กต์ได้และเนื่องจากกระบวนการใช้เวลาเล็กน้อยในการหมุนหลังจากสร้างเสร็จกระบวนการเหล่านี้จะค้างอยู่ (โดยค่าเริ่มต้นเป็นเวลา 15 นาทีฉันคิดว่า ) ดังนั้นหากคุณกำลังจะสร้างอีกครั้งในไม่ช้าโหนดเหล่านี้สามารถ "ใช้ซ้ำ" และประหยัดค่าใช้จ่ายในการตั้งค่ากระบวนการ แต่คุณสามารถปิดใช้งานพฤติกรรมนั้นได้โดยการปิด nodeReuse ด้วยตัวเลือกบรรทัดคำสั่งดังกล่าว

ดูสิ่งนี้ด้วย:


2
มีเหตุผล: ดูเหมือนจะไม่เกิดขึ้นถ้าฉันลบ / m ตอนนี้ฉันกำลังพยายามด้วย/m /nr:falseฉันจะวิ่งไปสักสองสามงานและดูว่าจะเป็นอย่างไร ขอบคุณ
gregmac

26
คุณจะทำให้ Visual Studio สร้างโครงการด้วยตัวเลือก msbuild ได้อย่างไร
Cameron Taggart

1
ฉันยังอยากรู้ แต่จริงๆแล้วฉันพบข้อผิดพลาด Visual Studio 11 Beta สำหรับโครงการ C ++ / CLI เป็นสาเหตุของอาการเดียวกัน: connect.microsoft.com/VisualStudio/feedback/details/728912/…
Cameron Taggart

3
การเพิ่มประสิทธิภาพก่อนวัยอันควรเป็นรากเหง้าของความชั่วร้ายทั้งหมดอย่างแท้จริง คุณดูด Microsoft
johnwbyrd

1
@CameronTaggart คุณสามารถเพิ่มตัวเลือกบรรทัดคำสั่ง msbuild ด้วยไฟล์พิเศษที่โฮสต์ในโฟลเดอร์โครงการ / โซลูชันของคุณ ดูdocs.microsoft.com/en-us/visualstudio/msbuild/…
needfulthing

43

ในการปิดการใช้งานโหนดซ้ำภายใน Visual Studio คุณต้องใช้ตัวแปรสภาพแวดล้อม:

MSBUILDDISABLENODEREUSE=1

ฉันใช้สิ่งนี้อย่างมีประสิทธิภาพ แต่มีเครื่องมืออื่นที่ล้มเหลวในตอนนี้เมื่อรวบรวม C ++ กับ VS11 Beta นั่นคือ mt.exe มีตัวแปรอื่นที่จะใช้สำหรับสิ่งนั้นหรือไม่
Eugenio Miró

ไม่สามารถตั้งค่าโดยใช้กล่องโต้ตอบใน VS ได้หรือไม่?
dom_beau

1
@dan ขอขอบคุณที่ค้นหาสิ่งนี้และฉันกำลังภาวนาให้มีตัวแปรสภาพแวดล้อมเพื่อปิดการใช้งาน Microsoft.VisualStudio.Web.Host.exe เช่นกัน
jerhewet

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