Visual Studio“ ไม่สามารถคัดลอก” …ในระหว่างการสร้าง


347

ฉันได้รับข้อผิดพลาดนี้ในระหว่างการสร้างโปรเจ็กต์ VS2012 C # ของฉัน

Error   41  Could not copy "obj\Debug\WeinGartner.WeinCad.exe" to
 "bin\Debug\WeinGartner.WeinCad.exe". 
 Exceeded retry count of 10. Failed.    


Error   42  Unable to copy file "obj\Debug\WeinGartner.WeinCad.exe" to
"bin\Debug\WeinGartner.WeinCad.exe". The process cannot access the file
'bin\Debug\WeinGartner.WeinCad.exe' because it is being used by another 
process.    

ตอนนี้ฉันรู้แล้วว่าการฆ่ากระบวนการ

Weingartner.WeinCad.vhost.exe

ใช้งานได้ (บางครั้ง) แต่สิ่งนี้กำลังเกิดขึ้นกับประสาท มีวิธีใดที่จะหยุดสิ่งนี้ไม่ได้เลย?

การตั้งค่าดีบักเกอร์ของฉันคือ

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่


สำหรับฉันมันเกิดจากการเปิดตัว. exe ด้วยตนเองในไดเรกทอรี Release ปัญหาคือ VS ไม่สามารถคัดลอกไฟล์ปฏิบัติการที่ยังคงทำงานอยู่ ฉันจะพยายามแก้ไขด้วยการล้างทรัพยากรอย่างถูกต้องเพื่อให้โปรแกรมไม่ปล่อยวางหลังจากปุ่มปิดหน้าต่าง
lahjaton_j

มีการสรุปที่ดีของปัญหานี้ด้วยขั้นตอนทั่วไปในการแก้ไขในคำถามนี้
LightCC

สิ่งนี้เกิดขึ้นกับฉันเพราะ Windows Defender ตัดสินใจว่าไม่ได้ชอบ. exe จากโครงการ VS2019 ที่ฉันทำงานอยู่อีกต่อไป เคยทำงานกับสิ่งนี้มาหลายสัปดาห์โดยไม่มีปัญหา แต่วันนี้เดาว่าการอัปเดตใหม่ไม่ชอบ ต้องแยกโฟลเดอร์ซอร์สของฉัน หยุดเกิดขึ้น
IronRod

คำตอบ:


401

ฉันพบข้อความแสดงข้อผิดพลาดที่คล้ายกันใน Visual Studio 2013

ส่วนใหญ่ฉันพบว่าสถานการณ์นี้เกิดขึ้นเมื่อกระบวนการดีบักถูกหยุดเนื่องจากข้อยกเว้น

เมื่อ clean + build ไม่สามารถแก้ไขปัญหานี้ให้ฉันได้ฉันก็ประสบความสำเร็จโดยทำดังต่อไปนี้:

  • การปิด Visual Studio
  • การลบbinและobjโฟลเดอร์และ
  • เปิด Visual Studio อีกครั้ง

"บั๊ก" นี้มีอยู่ตั้งแต่ Visual Studio 2003

ในที่สุดฉันก็พบว่าฉันมักจะสามารถเอาชนะปัญหานี้ได้โดยเพียงแค่เปลี่ยนชื่อไฟล์ที่ปฏิบัติการได้แล้วจึงลบมัน


8
เหมือนกันที่นี่ VS2013 การออกการลบสิ่งประดิษฐ์สร้างเริ่มใหม่ -> ทั้งหมดดี
cacau

49
ฉันมีปัญหาเดียวกัน แต่หลังจากที่เริ่มต้นใหม่ VS ฉันจะได้รับหนึ่งในการสร้างและไฟล์ที่ได้รับการล็อคอีกครั้ง ..
โซนิควิญญาณ

54
นี่ไม่ใช่วิธีการแก้ปัญหาบางส่วนที่ดีที่สุด ฉันไม่ต้องการรีสตาร์ท VS ทุก ๆ 10 นาที การทำความสะอาดโซลูชันใช้งานได้สำหรับฉัน แต่การทำความสะอาดทุก 10 นาทีไม่ใช่วิธีแก้ปัญหา
ตำนาน

7
จากประสบการณ์ของฉัน VS2013 ทำอย่างน้อยวันละ 10 ครั้งสำหรับฉันไม่ว่าฉันจะพัฒนาเครื่องอะไร มันเหมือนแมลงได้รับเลวร้ายยิ่ง เพียงแค่พูดว่า
AR

28
ข้อผิดพลาดยังคงมีอยู่ใน VS 2019
Akash KC

107

ใน Visual Studio Premium 2013 (อัปเดต 3) ฉันแก้ปัญหานี้ด้วยการสร้างล่วงหน้าหนึ่งครั้ง:

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb)

การดำเนินการนี้จะลบไฟล์ PDB เก่า ๆ อย่างสง่างาม (ถ้าทำได้) จากนั้นเปลี่ยนชื่อไฟล์ที่มี.old.pdbนามสกุล ผลข้างเคียงที่ดีคือถ้า PDB เก่ายังคงล็อคอยู่มันแค่เพิ่ม. old ชิ้นใหม่ลงในชื่อไฟล์และพวกมันจะได้รับการทำความสะอาดในครั้งต่อไปที่คุณเริ่มต้น Visual Studio ใหม่และสร้างบิลด์

ตัวอย่างเช่น build / debug session 1 จะMyProject.pdbถูกล็อก
ครั้งต่อไปที่คุณสร้าง:
MyProject.pdb->MyProject.old.pdb

จากนั้นบิลด์เซสชั่น / การดีบัก 2 จะเริ่มขึ้นและทั้งคู่ MyProject.pdbและMyProject.old.pdbยังคงถูกล็อค:
MyProject.old.pdb-> MyProject.old.old.pdb
MyProject.pdb->MyProject.old.pdb

ในที่สุดการรีสตาร์ท Visual Studio และการสร้างบิลด์ใหม่จะกำจัดทั้งสองอย่างนี้และดำเนินการตามปกติ


5
เช่นเดียวกันใน VS2010, VS 2012
Boogier

7
ขอบคุณทำงานอย่างสมบูรณ์แบบสำหรับฉันด้วยการปรับเปลี่ยนตัวอย่างการใช้ไฟล์ exe แทน ฉันคิดว่านี่อาจเป็นข้อผิดพลาดใน VS 2015 CTP ล่าสุดเช่นกัน
Johny Skovdal

ดีใจที่มันช่วย - ฉันยังคงมีคำสั่งสร้างล่วงหน้าและทำงานได้ดีพอที่ฉันจะลืมมันไปที่นั่น!
Geoff

3
ฉันเกลียดที่จะต้องทำสิ่งนี้กับอาจารย์ใหญ่ แต่ก็ใช้ได้ผลมีอยู่! :) ขอบคุณที่แบ่งปันไข่มุกนี้เจฟฟ์!
kayleeFrye_onDeck

1
ล่าสุด (2018-03-11) Visual Studio 2017 v15.6.1: ยังคงมีปัญหา การดีบักข้อยกเว้นแอสเซมบลีในไดเรกทอรีเป้าหมายถูกล็อก วิธีการแก้ปัญหาข้างต้นด้วย * .pdb เปลี่ยนเป็น * .dll
Michiel de Wolde

71

เป็นเพราะคุณได้ปิดแอปพลิเคชันของคุณ แต่มันยังคงทำงานในพื้นหลัง

วิธีแก้ปัญหาชั่วคราว:

  • ไปที่ Task Manager ( Ctrl+ Alt+ Esc)
  • ไปที่แท็บกระบวนการและค้นหา "YourProjectName.exe"
  • ทำเครื่องหมายที่ "แสดงกระบวนการจากผู้ใช้ทั้งหมด" หากคุณไม่พบกระบวนการของคุณ
  • สิ้นสุดกระบวนการ

ทางออกถาวร: คุณต้องปิดแอปพลิเคชันของคุณผ่านการเข้ารหัส นี่คือรหัส ...

System.Windows.Forms.Application.Exit();

คุณต้องใส่รหัสนี้ในกิจกรรมการปิดแบบฟอร์มในทุกรูปแบบ ตัวอย่าง:

private void frm_menu_FormClosing(object sender, FormClosingEventArgs e)
{
    System.Windows.Forms.Application.Exit();
}

1
ตรงนี้แหละ Visual Studio ล้มเหลวและ IIS Express ยังคงทำงานอยู่ (ในกรณีของฉัน) สิ่งที่ฉันต้องทำคือเปิดแถบงานและคลิกขวาที่ไอคอน IIS Express และออก ขอบคุณ.
the-nick-wilson

สิ่งนี้ได้ผลสำหรับฉัน ฉันไม่สามารถลบโฟลเดอร์ obj และ bin ได้เนื่องจากกระบวนการอื่นกำลังใช้งานอยู่ โชคดีที่ Windows 10 พูดจริง ๆ ว่าชื่อมันคืออะไร; เมื่อมันถูกปิดในตัวจัดการงานปัญหาก็หายไป
Novastorm

25

.vhost.exe เป็นกระบวนการดีบักเกอร์ดังนั้นจึงปรากฏว่ากระบวนการที่กำลังดีบั๊กไม่ได้ปิดอย่างถูกต้อง โอกาสที่คุณมีข้อผิดพลาดที่ทำให้มันมีชีวิตอยู่และไม่หยุดกระบวนการดีบั๊กอย่างถูกต้องมีตัวเลือกที่จะแยกออกจากกระบวนการเมื่อคุณคลิก 'หยุดการดีบั๊ก' แทนที่จะฆ่าดีบั๊กดังนั้นคุณอาจตั้งค่านั้น

แต่นั่นเป็นปัญหา - ไฟล์ที่คุณพยายามคัดลอกถูกล็อค (เช่นยังใช้อยู่) โดยระบบปฏิบัติการเพื่อป้องกันการคัดลอก ตรวจสอบให้แน่ใจว่าไฟล์นั้นว่างและคุณจะสามารถคัดลอกได้


ฉันได้เพิ่มตัวเลือกการดีบักเกอร์ในคำถาม ฉันค่อนข้างแน่ใจว่ามันควรจะฆ่ากระบวนการ แต่บางทีฉันไม่เข้าใจตัวเลือกบางอย่าง
bradgonesurfing

ในVisual Studio 2019ฉันได้รับข้อความที่คล้ายกันถึงแม้ว่าตอนนี้จะกล่าวถึงกระบวนการในการส่งออกบางส่วน (ไม่ใช่ทั้งหมด) มันเป็น testhost.x86.exe Task Managerที่ฉันได้ฆ่าผ่าน หลังจากนั้นดูเหมือนว่าจะหยุดตรวจจับหนึ่งในกระบวนการทดสอบ
Andez


20

คุณควรปิดการใช้งานโปรแกรมป้องกันไวรัสของคุณ (especailly ถ้าเป็น Avast) และลองอีกครั้ง มันช่วยฉัน ปัญหาคือตัวดีบักเกอร์ / ผู้สร้างสร้างไฟล์. exe ที่ระบุว่าเป็นภัยคุกคามโดย Avast และถูกลบทิ้งก่อนที่จะสามารถดำเนินการโดย VS


จับดี. ฉันเกลียดชังอาวาสตลอดไป
stackunderflow

Avast ก็เป็นปัญหาสำหรับฉันเช่นกัน การปิดการใช้งานระบบไฟล์โล่เป็นคำตอบ ฉันพยายามเพิ่มโฟลเดอร์ Visual Studio \ Projects ของฉันไปที่การยกเว้น แต่ไม่ได้ผล
KeithB

1
ฉันมีปัญหาเดียวกันกับการป้องกันปลายทางของ Symantec บางคนในแผนก IT ได้ปรับระดับความปลอดภัยให้สูงขึ้น :-) ขอบคุณ Pitrs
ssimm

ฉันจะเพิ่มที่คุณสามารถสร้างข้อยกเว้นสำหรับไดเรกทอรี obj \ Debug สำหรับการใช้งานได้อย่างมั่นใจแทนที่จะปิดการใช้งาน AV หรือหนึ่งในเครื่องมือป้องกัน
A. กาลี

ขอบคุณ! ฉันพบว่ามันเป็น MalwareBytes ปิดกั้นไฟล์. exe ของฉัน
NL3294

15

ฉันสามารถแก้ไขปัญหานี้ได้ (VS 2010) ผ่านการจัดหาการดำเนินการก่อนสร้าง

if exist "$(TargetPath).locked" del "$(TargetPath).locked"

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"

1
@luckyluke ในคุณสมบัติโครงการของคุณมีส่วนที่คุณสามารถเพิ่มสคริปต์สร้างล่วงหน้าได้ คัดลอกและวางสคริปต์ด้านบนในพื้นที่ที่กำหนดและสร้างโครงการใหม่ / เรียกใช้แอปพลิเคชันของคุณ
Nair

13

อ้างถึง:

วิธีแก้ไขคือการใส่สิ่งนี้ไว้ในคุณสมบัติบรรทัดคำสั่งเหตุการณ์ก่อนสร้างของโครงการ> (ในแท็บสร้างเหตุการณ์):

ตัวอย่างโค้ด

if exist "$(TargetPath).locked" del "$(TargetPath).locked"

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"

8

ข้อยกเว้น

ในบางกรณีใน Visual Studio เมื่อคุณ (สร้าง | | สร้างใหม่) ด้านบนของการ เรียกใช้ IISExpress คุณต้องเผชิญกับข้อยกเว้นนี้

ไม่สามารถคัดลอกไฟล์ "obj \ Debug \ YourProjectName.dll" ไปยัง bin \ YourProjectName.dll " กระบวนการไม่สามารถเข้าถึงไฟล์ 'bin \ YourProjectName.dll' เนื่องจากมีการใช้งานโดยกระบวนการอื่น

สารละลาย

  1. คลิกขวาที่โครงการเว็บที่ต้องการสร้าง
  2. คลิกที่คุณสมบัติ
  3. เลือกแท็บสร้างกิจกรรมทางด้านซ้าย
  4. ในบรรทัดคำสั่งเหตุการณ์ก่อนสร้างวาง 2 บรรทัดเหล่านี้:
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "iisexpress.exe"

คุณเป็นคนดี 2 คน!


6

ดูเหมือนว่าโดยการเปลี่ยนชื่อชุดประกอบของโครงการแก้ไขปัญหา

ดังนั้นแทนที่จะเป็นเช่นนี้

ป้อนคำอธิบายรูปภาพที่นี่

ฉันเปลี่ยนมันเป็นสิ่งนี้

ป้อนคำอธิบายรูปภาพที่นี่

สังเกตว่าฉันเพิ่งเปลี่ยนจากIncrement and Recallเป็นIncrement_Recallฉันเพิ่งลบช่องว่าง ตอนนี้ทำงานได้ดีสำหรับฉัน


6

การฆ่ากระบวนการ w3wp.exe (IIS) มักจะแก้ปัญหานี้
โดยทั่วไปคุณสามารถทราบกระบวนการที่มีการล็อกไฟล์โดยไปที่โฟลเดอร์ bin และพยายามที่จะลบ ข้อความแสดงข้อผิดพลาดที่จะปรากฏขึ้นในกรณีที่กระบวนการอื่นกำลังใช้งานอยู่จะมีชื่อของกระบวนการที่จะต้องถูกฆ่า


4

ฉันประสบปัญหาเดียวกันกับ VS 2012 เวอร์ชัน 11.0.60610.01 อัปเดต 3 บน Windows 8

ไม่มีหน้าต่างนักออกแบบที่เปิดอยู่และโปรเจ็กต์นี้เป็นแอปพลิเคชันคอนโซลที่เรียบง่าย

การลบกระบวนการ vshost ที่เข้าถึงไฟล์ไม่ได้ใช้เวลาส่วนใหญ่เนื่องจากกระบวนการไม่ได้เข้าถึงไฟล์

วิธีแก้ปัญหาที่ง่ายที่สุดที่ทำงานและใช้เวลาน้อยที่สุดคือการลบโครงการออกจากโซลูชันสร้างโครงการอื่นในโซลูชันจากนั้นเพิ่มต้นฉบับกลับ

มันระคายเคืองและเสียเวลา แต่ตัวเลือกอื่นที่แพงที่สุดที่ฉันรู้

หวังว่านี่จะช่วย ...


สิ่งที่คุณต้องทำคือสร้างใหม่ทั้งหมดและทุกอย่างดีสำหรับการลองอีก 10 ครั้ง ไม่ค่อยสะดวกเท่าไหร่
Scott Shaw-Smith

@Scott Shaw-Smith ไม่ได้ผลสำหรับฉัน และจากความคิดเห็นอื่น ๆ ที่ฉันได้เห็นมันไม่ได้ผลสำหรับคนอื่นเช่นกัน ในกรณีของฉันการถอนการติดตั้ง Avast ได้แก้ไข
user316117

4

ฉันคิดว่าฉันแก้ไขมันเอาเครื่องหมายถูกBreak all processes when one process breaksในตัวเลือก Debug (หน้าจอแรกของ op-> ตัวเลือกที่สอง)
มันสร้าง / ทำงานได้ดีมาระยะหนึ่งแล้วตั้งแต่ฉันไม่ได้ทำเครื่องหมาย
ฉันใช้ตัวควบคุม MySql NET Connector และ DevExpress ในโครงการของฉัน อาจเป็นหนึ่งในนั้นไม่ได้กำจัดการเชื่อมต่อการผูก ฯลฯ ดีเพราะธงผึ้งเปิดใช้งาน

แก้ไข: มันใช้งานได้จริง! ไม่มี 'ไม่สามารถคัดลอกไฟล์' และไม่มีข้อผิดพลาดในการออกแบบฟอร์มอีกต่อไป


1
ไม่มีวิธีแก้ปัญหาอื่นที่ใช้งานได้สำหรับฉัน นี่เป็นสิ่งเดียวเท่านั้น ฉันใช้ Visual Studio 2017 13.2
xleon

4

เพิ่มในเหตุการณ์ที่สร้างไว้ล่วงหน้าของ taskkill โครงการ / f / fi "pid gt 0" / im "YourProcess.vshost.exe"


ไม่ชอบแก้ปัญหาด้วยวิธีนี้ แต่ใช้งานได้!
Petter T

ฉันพบวิธีแก้ปัญหาการทำงานที่ง่ายที่สุดสำหรับปัญหานี้แล้ว
dscharge

4

เงินบริจาค 10 เซนต์ของฉัน

ฉันยังคงมีปัญหานี้เป็นครั้งคราวในการอัปเดต VS 2015

ฉันพบว่าการสลับการรวบรวมเป้าหมายเป็นการแก้ปัญหา

ลองสิ่งนี้: ถ้าคุณอยู่ใน DEBUG ให้เปลี่ยนเป็น RELEASE และสร้างจากนั้นกลับไปที่ DEBUG ปัญหาหายไป

สเตฟาโน


ใช่ แค่นั้นแหละ. นี่เป็นวิธีง่ายๆในการแก้ไขปัญหาที่น่ารำคาญนี้! ทำงานให้ฉันโดยสิ้นเชิง ง่ายและรวดเร็ว! ขอบคุณมาก.
Meister Schnitzel

1
มันใช้งานได้สำหรับฉัน! คำแนะนำ: เมื่อปิดการใช้งาน Debug >> ตัวเลือก >> การดีบัก >> ทั่วไป >> "ใช้โหมดความเข้ากันได้ของการจัดการ" ไม่จำเป็นต้องใช้วิธีแก้ปัญหา!
leon22

4

ทำตามขั้นตอนด้านล่าง

  1. เปิดตัวจัดการงาน (Ctrl + Alt + Delete)
  2. ภายใต้แท็บประสิทธิภาพการทำงานให้เลือก < ProjectNameOfYours.exe >
  3. คลิกที่กระบวนการสิ้นสุด
  4. ตอนนี้สร้างโซลูชัน

ขั้นตอนข้างต้นแก้ไขข้อผิดพลาดอย่างถาวร :)


4

หากไม่มีคำตอบใด ๆ ให้ลองใช้การตรวจสอบง่ายๆนี้ ค้นหา MSbuild.exe ใด ๆ ที่ทำงานและถือ EXE โครงการของคุณ กำจัด MSBuild.exe และคุณน่าจะดี


2

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


2

ดูคำตอบอื่น ๆนี้ โดยพื้นฐานแล้วคุณอาจมีกระบวนการ MSBuild.exe ที่ทำงานในไฟล์ทรัพยากรที่ใช้เป็นพื้นหลัง หากคุณมีงานสร้างล่วงหน้าหรือโพสต์ที่ทำให้ MSBuild ถูกเตะออกจากบรรทัดคำสั่งให้ลองเพิ่มการตั้งค่าสถานะ "/ nr: false" ในคำสั่งนี้ แต่อีกครั้งดูคำตอบก่อนหน้านี้สำหรับรายละเอียดเฉพาะเพิ่มเติม


Snap ฉันมีปัญหาเดียวกันในการอัพเดต VS2015 2 - MSBuild กระบวนการ exe ต้องถูกฆ่าใน TaskManager ก่อนจึงจะสามารถสร้างใหม่ได้
Nick Wright

ลิงก์บทความในคำตอบของ Josh ด้านบนแนะนำให้ใช้ตัวแปรสภาพแวดล้อมระบบเพื่อปิดการใช้งานโหนดซ้ำใน Visual Studio และกระบวนการ MSBuild (MSBUILDDISABLENODEREUSE = 1) - สิ่งนี้ใช้ได้สำหรับฉัน
Nick Wright

2

ในที่สุดฉันจะแก้ไขได้อย่างไร สาเหตุที่เราไม่สามารถดีบักต่อไปหลังจากการดีบักครั้งแรกเนื่องจาก exe debug ตัวแรกยังทำงานอยู่ ดังนั้นหลังจากแก้ไขข้อบกพร่องครั้งแรกคุณต้องไปที่ตัวจัดการงาน -> แท็บกระบวนการ -> [ชื่อโครงการของคุณ exe] สิ้นสุดกระบวนการ exe

มันเหมาะกับฉัน :)


ว้าวขอบคุณชายปัญหาของฉันอย่างแน่นอน ตามที่ขอรหัสผ่านผู้ใช้สำหรับฉันในขณะที่ใช้ exe ครั้งแรกมันไม่ได้ทำงาน เมื่อฉันพยายามลบแอพนั้นในรายการกระบวนการแล้วตรวจแก้จุดบกพร่องอีกครั้งมันทำงานได้อย่างไม่มีที่ติ
Chandraprakash

2

@ Geoff's ( https://stackoverflow.com/a/25251766/3739540 ) คำตอบนั้นดี แต่มันจะส่งรหัสข้อผิดพลาด 1 เมื่อคอมไพล์ใหม่

นี่คือสิ่งที่ใช้งานได้สำหรับฉัน (2> nul 1> nul เมื่อสิ้นสุด + ออก 0):

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb) 2>nul 1>nul
(if exist "$(TargetDir)*old.dll" del "$(TargetDir)*old.dll") & (if exist "$(TargetDir)*.dll" ren "$(TargetDir)*.dll" *.old.dll) 2>nul 1>nul
exit 0

2

หากคุณกำลังดีบักเท็มเพลต T4สิ่งนี้จะเกิดขึ้นตลอดเวลา โซลูชันของฉัน (ก่อนที่ MS จะแก้ไขปัญหานี้) เป็นเพียงการฆ่ากระบวนการนี้:

ตัวจัดการงาน -> ผู้ใช้ -> T4VSHostProcess.exe

กระบวนการนี้เกิดขึ้นเมื่อคุณดีบักเท็มเพลต T4 ไม่ใช่เมื่อคุณรันหนึ่ง


2

นี่คือสคริปต์เพื่อกำจัดปัญหานี้อย่างแน่นอน:

REM   This script is invoked before compiling an assembly, and if the target file exist, it moves it to a temporary location
REM   The file-move works even if the existing assembly file is currently locked-by/in-use-in any process.
REM   This way we can be sure that the compilation won't end up claiming the assembly cannot be erased!

echo PreBuildEvents 
echo  $(TargetPath) is %1
echo  $(TargetFileName) is %2 
echo  $(TargetDir) is %3   
echo  $(TargetName) is %4

set dir=C:\temp\LockedAssemblies

if not exist %dir% (mkdir %dir%)

REM   delete all assemblies moved not really locked by a process
del "%dir%\*" /q

REM   assembly file (.exe / .dll) - .pdb file and eventually .xml file (documentation) are concerned
REM   use %random% to let coexists several process that hold several versions of locked assemblies
if exist "%1"  move "%1" "%dir%\%2.locked.%random%"
if exist "%3%4.pdb" move "%3%4.pdb" "%dir%\%4.pdb.locked%random%"
if exist "%3%4.xml.locked" del "%dir%\%4.xml.locked%random%"

REM Code with Macros
REM   if exist "$(TargetPath)"  move "$(TargetPath)" "C:\temp\LockedAssemblies\$(TargetFileName).locked.%random%"
REM   if exist "$(TargetDir)$(TargetName).pdb" move "C:\temp\LockedAssemblies\$(TargetName).pdb" "$(TargetDir)$(TargetName).pdb.locked%random%"
REM   if exist "$(TargetDir)$(TargetName).xml.locked" del "C:\temp\LockedAssemblies\$(TargetName).xml.locked%random%"

REM PreBuildEvent code
REM   $(SolutionDir)\BuildProcess\PreBuildEvents.bat  "$(TargetPath)"  "$(TargetFileName)"  "$(TargetDir)"  "$(TargetName)"

REM References:
REM   http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
REM   http://stackoverflow.com/a/2738456/27194
REM   http://stackoverflow.com/a/35800302/27194

สคริปต์ต้องถูกเรียกใช้จากเหตุการณ์ก่อนสร้างแต่ละโครงการ VS

$(SolutionDir)\BuildProcess\PreBuildEvents.bat  "$(TargetPath)"  "$(TargetFileName)"  "$(TargetDir)"  "$(TargetName)"

ป้อนคำอธิบายรูปภาพที่นี่


2
  1. เปิดคุณสมบัติโครงการ [เมนู> โครงการ> คุณสมบัติ]
  2. เลือกแท็บ "ดีบั๊ก"
  3. ยกเลิกการเลือก "เปิดใช้งานกระบวนการโฮสต์ภาพสตูดิโอ"
  4. เริ่มแก้ไขข้อบกพร่อง [F5]
  5. คุณจะได้รับคำเตือนด้านความปลอดภัยเพียงแค่ "ตกลง" ให้แอปพลิเคชันทำงาน
  6. หยุดการดีบัก
  7. ตรวจสอบตัวเลือก "เปิดใช้งานกระบวนการโฮสต์ภาพในสตูดิโอ" ภายใต้แท็บดีบั๊ก
  8. ตอนนี้ให้ลองเริ่มการดีบักคุณจะไม่เห็นข้อผิดพลาดอีก

[ทำงานให้ฉัน]


ทำไมถึงเป็นแบบนี้ -2 มันได้ผลสำหรับฉันเช่นกัน มันทำให้รู้สึกเป็นศูนย์ แต่เฮ้ถ้ามันใช้งานได้ผล
Wakka02

นี่เป็นทางออกถาวรหรือไม่? คุณต้องทำ 8 ขั้นตอนเหล่านี้ทุกครั้งหรือไม่
Arthur Swails

vs17 ไม่มีตัวเลือกกระบวนการโฮสต์
John Demetriou

1

คำถามนี้เป็นผลลัพธ์แรกเมื่อค้นหาข้อผิดพลาดต่อไปนี้:

ไม่สามารถคัดลอกไฟล์ "... " เพราะไม่พบ

เมื่อสร้างใน Visual Studio 2013 (อัปเดต 3)

โซลูชัน: การถอนการติดตั้ง "เครื่องมือเพิ่มประสิทธิภาพการผลิต" ใน Visual Studio 2013

https://connect.microsoft.com/VisualStudio/feedback/details/533411


รับข้อผิดพลาดนี้หลายครั้งในการสร้างสำหรับโครงการที่สืบทอดมาจาก TFS คิดว่านี่คือมัน! ค้นหาสิ่งนี้ในโปรแกรมที่ติดตั้งและ Add-in ไม่พบแอปพลิเคชันเครื่องมือไฟฟ้านี้ สิ่งนี้จะซ่อนที่ไหน
Taersious

1

ในกรณีของฉันมันเป็นนักวิ่งทดสอบหน่วย Resharper (รวมถึงการทดสอบ NUnit ไม่เคยมีปัญหาดังกล่าวกับ MsTests) หลังจากการฆ่ากระบวนการก็สามารถสร้างกระบวนการโดยไม่ต้องรีสตาร์ทระบบปฏิบัติการหรือ VS2013


ใช่มองหาJetBrains.Resharper.TaskRunner.*
Dunc

1

ฉันไม่ทราบว่าฉันยังคงเชื่อมต่อดีบักเกอร์และพยายามสร้างในอินสแตนซ์ Visual Studio เดียวกัน เมื่อฉันหยุดดีบักเกอร์ฉันก็สามารถสร้างได้


1

การฆ่ากระบวนการvstest.executionengine.exeช่วยแก้ไขปัญหานี้ได้ 90% ของเวลาสำหรับฉัน หากวิธีนี้ใช้ไม่ได้ผลให้ฆ่าQTAgent32.exe ด้วยแล้วลบโฟลเดอร์ / bin และ / obj สำหรับโครงการที่เป็นปัญหา

นี่เป็นส่วนที่รำคาญที่สุดในวันทำงานของฉัน :)


1

สำหรับฉันมันเป็นโปรแกรมป้องกันไวรัส Avast ที่จะไม่ยอมให้ visual studio เขียนหรืออ่าน / เรียกใช้ไฟล์ ดังนั้นฉันต้องเพิ่มโฟลเดอร์ Visual Studio 2010/2012 ลงในรายการยกเว้นแอนติไวรัส และหลังจาก Baam นั้น ... มันใช้งานได้


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