ข้อผิดพลาดในการสร้าง:“ กระบวนการไม่สามารถเข้าถึงไฟล์ได้เนื่องจากกำลังถูกใช้โดยกระบวนการอื่น”


92

ฉันมีwebformsแอปC # ซึ่งจนถึงวันนี้ก็ใช้งานได้แค่ว่ายน้ำ

วันนี้ทันใดนั้นทุกครั้งที่ฉันลองเรียกใช้แอปฉันได้รับข้อผิดพลาดในการล็อกไฟล์:

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

Googling ข้อผิดพลาดไม่ได้เกิดขึ้นนอกเหนือจากที่ชัดเจนกล่าวคือ VS คิดว่าไฟล์ถูกล็อก และแน่นอนว่าเป็นVisual Studio ที่ล็อคไฟล์เพราะเมื่อฉันปิด VS และเปิดขึ้นมาใหม่โปรเจ็กต์จะทำงานได้ดีในครั้งแรก เมื่อฉันพยายามเรียกใช้ครั้งที่สองฉันได้รับข้อผิดพลาดในการล็อกไฟล์

การปิด VS และเปิดใหม่ทุกครั้งที่ฉันต้องการเรียกใช้แอปไม่ใช่วิธีแก้ปัญหาที่ทำได้! ฉันจะทราบได้อย่างไรว่ามีอะไรล็อกไฟล์และหยุดไม่ให้ถูกล็อก

แก้ไข: การค้นพบที่น่าสนใจอีกอย่าง: ฉันไม่ต้องเรียกใช้แอปด้วยซ้ำ การคอมไพล์ครั้งเดียวทำให้เกิดการล็อกไฟล์ ฉันไม่สามารถรวบรวมสองครั้งติดต่อกัน!

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


คุณสามารถลองฆ่า vshost.exe เพื่อดูว่าช่วยได้หรือไม่
rene

@rene - ไม่มีกระบวนการ vshost.exe พวกเขาเปลี่ยนชื่อใน VS 2010 หรือไม่?
Shaul Behr

[ชื่อแอปของคุณ] .vshost.exe
rene

@rene - ไม่ไม่มีสิ่งใดปรากฏในกระบวนการปัจจุบันตามชื่อนั้น
Shaul Behr

1
@ คุณ Shaul ได้เพิ่ม usercontrol ที่กำหนดเองลงในแบบฟอร์มของคุณแล้วหรือยัง? ลองปิดตัวออกแบบก่อนรัน: stackoverflow.com/questions/2690119/…
rene

คำตอบ:


136

ฉันพบวิธีง่ายๆที่เหมาะกับฉันแล้ว มันจะเป็นแบบนี้:

เมื่อปัญหาเกิดขึ้นเพียงแค่เปลี่ยนการกำหนดค่าสิ่งปลูกสร้างที่ด้านบน (หากอยู่ใน“ Release” เป็น“ Debug” และในทางกลับกัน) สร้างแล้วเปลี่ยนกลับไปใช้การกำหนดค่าก่อนหน้าและสร้างอีกครั้ง

ภาพหน้าจอ

ฉันคิดว่าการเปลี่ยนการกำหนดค่าจะเผยแพร่ vcshost และ devenv


2
คำตอบที่ดีที่สุด IMO (อา - เขาให้
เครดิต

นี่เป็นวิธีแก้ปัญหาที่ยอดเยี่ยม! แม้ว่าบางครั้งมันจะหยุดทำงานด้วยเหตุผลบางประการ (?)
Christopher

3
@ChrisEmerson ฉันก็สังเกตเห็นเช่นกัน ฉันเปลี่ยนเป็นรีลีสและสร้างและเรียกใช้แอพได้ แต่ไม่สามารถสร้างโปรเจ็กต์ได้หลังจากเปลี่ยนกลับเป็นดีบั๊ก
Zack

ฉันต้องรีสตาร์ท Visual Studio เพื่อกำจัดแอสเซมบลี ฉันพยายามรีเซ็ต IIS และวิธีแก้ปัญหาข้างต้น แต่ฉันยังเห็นไฟล์ dll อยู่ในโฟลเดอร์ C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL
Weihui Guo

1
มันได้ผลเพียงครั้งเดียวจากนั้นไม่เคยอีกเลย ไม่ได้รีสตาร์ท VS. ไม่ว่าฉันจะสลับระหว่าง Release และ Debug มากแค่ไหนก็ล้มเหลว
Frank H.

24

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

... และทุกอย่างยังคงทำงานได้ดี

ฉันเปรียบเทียบกับการควบคุมแหล่งที่มาของ. csproj ดั้งเดิมของฉัน ไม่มีความแตกต่างที่แท้จริง และแม้ว่าฉันจะลองเปลี่ยนกลับเป็น. csproj เวอร์ชันก่อนหน้า แต่ก็ยังใช้งานได้

มนต์ดำ. ถ้ามันได้ผลบางครั้งก็ไม่ควรถามว่าทำไม - แค่ยอมรับมันและก้าวต่อไป ...

แก้ไข:ปัญหาเกิดขึ้นซ้ำซากและฉันเชื่อว่าฉันได้แยกมันออกเมื่อฉันเปิดให้ผู้ออกแบบฟอร์มเปิดแบบฟอร์มนามธรรม / ทั่วไปในเวลารวบรวม

บทเรียนที่เรียนรู้:ตรวจสอบให้แน่ใจว่าตัวออกแบบฟอร์มของรูปแบบนามธรรมหรือทั่วไปหรือส่วนควบคุมปิดอยู่ก่อนที่คุณจะรวบรวม! ถ้าไม่คุณต้องปิด VS แล้วเปิดใหม่!


1
อาจเป็นเพราะไฟล์ใดก็ตามที่มีปัญหาไม่สามารถเข้าถึงได้ด้วยกระบวนการใด ๆ อีกต่อไปเนื่องจากถูกลบออก การลบไฟล์ทั้งหมดควรแก้ปัญหานั้นได้จริง ความคิดที่ดี.
Jeff LaFay

2
สิ่งนี้ยังคงเกิดขึ้นกับโปรเจ็กต์บรรทัดคำสั่งเท่านั้น (ไม่มีแบบฟอร์ม) ดังนั้นฉันไม่แน่ใจว่าคุณกำลังทำอะไรอยู่
Zack

16

สิ่งที่เราค้นพบที่นี่มีดังต่อไปนี้: ในหน้าคุณสมบัติของโปรเจ็กต์แท็บดีบักให้ยกเลิกการเลือก "เปิดใช้กระบวนการโฮสต์ Visual Studio" ฉันไม่แน่ใจว่าคุณสมบัตินี้มีไว้เพื่ออะไร แต่มันใช้งานได้เมื่อไม่เลือก


4
มันแก้ปัญหาได้ แต่ Console.WriteLine () ไม่แสดงสตริงในหน้าต่างผลลัพธ์อีกต่อไป
Pierre Fournier

2
ปัญหายังคงมีอยู่หลังจากยกเลิกการเลือกช่องในแอปคอนโซล
Zack

2
มันใช้ได้กับฉันในโครงการไคลเอนต์ Windows ฉันยกเลิกการเลือกช่องสร้างสำเร็จแล้วตรวจสอบอีกครั้งและสร้างสำเร็จอีกครั้ง
Fei-Xue

1
ไม่ได้ผลสำหรับฉัน ตอนนี้แอปถูกล็อค ไม่ใช่แอปโฮสต์
Boris Ivanov

9

จริงๆแล้วคุณควรเลือก "เปิดใช้งานกระบวนการโฮสติ้ง Visual Studio" อย่างน้อยก็สำหรับ VS2010 อยู่ดี และฉันยังมี:

ถ้ามีอยู่ "$ (TargetPath) .locked" del "$ (TargetPath) .locked" ถ้ามีอยู่ "$ (TargetPath)" ถ้าไม่มี "$ (TargetPath) .locked" move "$ (TargetPath)" "$ (TargetPath) .locked "

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

โปรดสังเกตด้วยว่า -app-vshost.exe ทำงานในพื้นหลังแม้ว่าจะไม่ได้ทำการดีบักก็ตาม ซึ่งเป็นสิ่งที่ทำให้สร้างและรันได้สำเร็จทุกครั้งที่ฉันเดา มันไม่ได้ทำงานมาก่อน และฉันยังได้ลองล้างโฟลเดอร์ debug และ release และเปลี่ยนประเภทเป้าหมายอย่างต่อเนื่องและไม่มีอะไรได้ผลยกเว้นตามที่อธิบายไว้ข้างต้น วิธีแก้ปัญหาของฉันก่อนหน้านี้คือรอ 5 นาทีระหว่างการสร้างซึ่งน่ารำคาญมากและใช้เวลานานในการทำอะไรให้เสร็จ ฉันไม่เห็นการเปลี่ยนแปลงใด ๆ ในพฤติกรรมที่มันมีความสำคัญกับแท็บที่เปิดหรือ XNA เทียบกับหน้าต่างหรือนักออกแบบที่เปิดอยู่ ปัญหานี้เกิดขึ้นในรุ่น 32 บิตหรือ 64 บิตและไม่สำคัญว่าฉันจะฆ่าแอปด้วย ALT-F4 หรือฆ่าด้วยตัวจัดการงานซึ่งตามทฤษฎีแล้วจะไม่อนุญาตให้แอปปิดหรือปล่อยทรัพยากร ตอนแรกคิดว่าเป็นเรื่องการเก็บขยะ


ในที่สุดสคริปต์เหตุการณ์ก่อนสร้างที่นี่ก็แก้ไขสิ่งนี้ให้ฉัน - ขอบคุณ!
Christopher

นี่เป็นความคิดเห็นเดียวที่เคยทำอะไรให้ฉันฉันไม่อยากเชื่อเลยว่าปัญหาง่ายๆเช่นนี้ยังคงมีอยู่เป็นเวลาหลายปี
ConstantineK


5

ฉันเอาชนะปัญหานี้ได้โดยการเปลี่ยนชื่อไฟล์ที่ถูกล็อก (โดยใช้ Windows Explorer) ฉันไม่ได้รับอนุญาตให้ลบไฟล์ แต่การเปลี่ยนชื่อไฟล์ที่ถูกล็อกใช้งานได้!


นี่เป็นทางออกเดียวที่ใช้ได้ผลสำหรับฉันจนถึงตอนนี้ ทางออกที่ดี ช่วยฉันแก้ปัญหาในการรีบูตเครื่อง
JHubbard80

คงจะดีถ้ามีสิ่งนี้เป็นงานสร้างล่วงหน้า ฉันมีปัญหานี้เสมอ! น่ารำคาญมาก.
Shimmy Weitzhandler

5

ตอบช้าไปหน่อย แต่ฉันแก้ปัญหานี้ได้โดยไปที่คุณสมบัติของโปรเจ็กต์> แท็บ "ดีบัก"> ที่ไม่ได้เลือกตัวเลือก "เปิดใช้งานกระบวนการโฮสต์ Visual Studio"


4

ฉันแก้ไขสิ่งนี้โดยการลบโฟลเดอร์ bin \ Debug และอาจเริ่ม VS ใหม่


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

2

สำหรับฉันมันเป็นบริการ Windows ที่ติดตั้งและใช้งานอยู่ เมื่อฉันหยุดมันการสร้างก็สำเร็จ


2

เรียกใช้คำสั่งนี้จากกล่อง Run:

net stop iisadmin /y

แล้ว

iisreset

ทำงานให้ฉัน เทียบกับปี 2546


1

เมื่อเร็ว ๆ นี้พบปัญหานี้เมื่อพยายามสร้างโซลูชันที่ฉันกำลังดำเนินการอยู่ (ไม่ใช่แค่ winforms proj)
นอกเหนือจากbuildความล้มเหลวฉันสังเกตเห็นว่าการทำความสะอาดโปรเจ็กต์จะล้มเหลวอย่างเงียบ ๆ (การตรวจสอบโฟลเดอร์ bin แสดงให้เห็นว่าไฟล์ไม่ได้ถูกลบจริง ๆ ) และการปิด Visual Studio ไม่ได้จบลงdevenvกระบวนการจากนั้นกระบวนการกู้คืน Windows จะรีสตาร์ท Visual Studio

หลังจากลองผิดลองถูกฉันพบว่าปัญหาเกิดขึ้นกับฉันเมื่อฉันเปิดวิธีแก้ปัญหาจากเมนู "ล่าสุด" ในการเริ่ม VS
เปิดโซลูชันจากที่File >> Open >> Project/Solutionพบว่าทำงานได้ตามปกติ

ตอนนี้ไม่รู้ว่าทำไม - จะดูเรื่องนี้ต่อไป แต่ตอนนี้อย่างน้อยฉันก็ทำงานได้!


1

เพียงตรวจสอบการอ้างอิงและลบการอ้างอิงตัวเองไปยังโครงการ

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

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


1

ฉันมีปัญหาเดียวกันกับแอปพลิเคชัน Xamarin ใน Visual Studio และได้รับการแก้ไขโดยการถอดปลั๊กอุปกรณ์มือถือทดสอบของฉัน แอปพลิเคชันถูกปิดและดีบักเกอร์หยุดทำงาน แต่ข้อผิดพลาดยังคงเกิดขึ้นเมื่อพยายามสร้างหรือสร้างโซลูชันใหม่ มันหยุดหลังจากที่ฉันถอดปลั๊กอุปกรณ์เพราะฉันต้องรับสาย


1

เพียงแค่โยน 2 เซ็นต์ของฉัน ปัญหาของฉันได้รับการแก้ไขโดยการเปิดตัวจัดการงานและฆ่าแอปพลิเคชัน มันกำลังทำงานอยู่เบื้องหลังโดยไม่มีสัญญาณบ่งชี้ว่ากำลังทำงานอยู่เลย (ไม่มีรายการในแถบงานไม่มี UI ไม่มีอะไรเลย) แต่ฉันไม่แน่ใจว่าทำไมถึงเกิดขึ้น เห็นได้ชัดว่าดีบักเกอร์ไม่ทำงานและตอนนั้นฉันมี VS เปิดอยู่เพียงอินสแตนซ์เดียว ทำให้ฉันประหลาดใจที่สิ่งนี้ยังคงเกิดขึ้นใน VS 2017 นี้

บางทีฉันอาจเพิ่มขั้นตอนการสร้างที่มองหาแอปพลิเคชันที่ทำงานอยู่เบื้องหลังและฆ่ามันก่อนที่จะเริ่มต้นใหม่


1

ฉันมีปัญหาเดียวกันและไม่สามารถแก้ไขโดยใช้วิธีการใด ๆ ที่กล่าวถึงในคำตอบก่อนหน้านี้ ฉันแก้ไขปัญหาโดยการฆ่า "SSIS Debug Hist (32 บิต)" ทั้งหมดในตัวจัดการงานและตอนนี้ก็ทำงานได้ตามปกติ



0

เว็บแอปของคุณกำหนดค่าอย่างไร มันทำงานภายใต้ Cassini (ถาดเว็บเซิร์ฟเวอร์) หรือ IIS หรือไม่

สิ่งนี้ไม่ควรเกิดขึ้นตามปกติ ฉันคิดว่า ProcessExplorer สามารถบอกคุณได้ว่าไฟล์ใดที่กระบวนการล็อกไว้ หากไม่ประมวลผล explorer หนึ่งในเครื่องมือ sysinternals อื่น ๆ

สิ่งหนึ่งที่ต้องลองก่อนที่จะดาวน์โหลดเครื่องมือ SI อย่างใดอย่างหนึ่งคือหยุดเว็บเซิร์ฟเวอร์ Cassini และดูว่าจะทำให้ไฟล์ว่างหรือไม่


ไม่ใช่เว็บแอป มันเป็น winforms
Shaul Behr

3
อ่าคุณอาจต้องการแก้ไขคำถามของคุณเมื่อคุณเริ่มต้นด้วย "ฉันมีแอป C # เว็บฟอร์ม ... "
Andy


0

ฉันมีปัญหาเดียวกันนี้เช่นกัน การเปลี่ยน config debug / release ไม่ได้ทำเคล็ดลับ อย่างน้อยก็ไม่ต้องสร้างระหว่าง

ในโซลูชันของฉัน (winform) ได้รับการแก้ไขโดยการเปิด mainform ของ winform ในตัวออกแบบ เปลี่ยนเป็นรหัส (F7) จากนั้นปิดโค้ดปิดตัวออกแบบของ winform และสร้างใหม่ทั้งหมด (ctrl-shift-B) สิ่งนี้ได้ผลสำหรับฉัน

ดูเหมือนว่าแฮนเดิลบางประเภทจากภายในแอพ winform (ซึ่งรันโปรแกรมทำงานเบื้องหลัง) ยังคงมีไฟล์จัดการในไลบรารีอื่น ๆ ที่ใช้



0

ในกรณีของฉันมีกระบวนการ vstest บางอย่างกำลังทำงานอยู่ (มีหลายชื่อ แต่ทั้งหมดมีสตริง vstest) ฉันต้องยกเลิกมันใน taskmgr



0

เมื่อฉันสิ้นสุดกระบวนการ.Net Core Hostทุกอย่างก็เรียบร้อยดี ฉันไม่จำเป็นต้องปิด Visual Studio หรือเปลี่ยนแปลงสิ่งอื่นใด


0

สำหรับผู้ที่กำลังพัฒนาใน VS with Docker ให้รีสตาร์ทบริการ docker for windows แล้วปัญหาจะได้รับการแก้ไขทันที

ก่อนที่จะรีสตาร์ทนักเทียบท่าฉันลองทำตามคำตอบที่กล่าวมาทั้งหมดไม่พบว่ามีการรันกระบวนการ msbuild.exe ลองรีสตาร์ท VS โดยไม่มีประโยชน์เพียงแค่รีสตาร์ทนักเทียบท่าเท่านั้นที่ใช้งานได้


0

อีกวิธีหนึ่ง: เมื่อไฟล์ถูกล็อกระบบจะรายงานกระบวนการบล็อก (เช่น "ServiceHub.Host.CLR.x64 (7764)") โดยมี id อยู่ในวงเล็บ หากต้องการกำจัดกระบวนการนี้ให้เปิด PowerShell (x + Win + I) แล้วพิมพ์: "Stop-Process -Id idNumber"


0

ฉันเพิ่งพบปัญหาเมื่อปรับใช้กับ Service Fabric ข้อผิดพลาดนี้บ่งบอกว่ามีการใช้งาน 'ไฟล์' อย่างไรก็ตามฉันพบว่ามีการใช้พอร์ตโดย IDE อื่น ด้วยการหยุดบริการที่กำลังทำงานอยู่ซึ่งโฮสต์บนพอร์ตอยู่แล้วฉันสามารถหยุดข้อยกเว้นนี้ไม่ให้เกิดขึ้นได้


0

ฉันประสบปัญหาเดียวกัน ฉันลองใช้วิธีแก้ปัญหาหลายอย่างที่ระบุไว้ข้างต้น แต่ไม่ได้ผลสำหรับฉัน

ฉันแก้ไขปัญหานี้โดยการปิดการเชื่อมต่อจาก Server Explorer และปิดแท็บทั้งหมดที่เปิดอยู่ใน Visual Studio


0

หากนี่เป็นโปรเจ็กต์ SSIS ให้เปิดตัวจัดการงานและฆ่าอินสแตนซ์ทั้งหมดของ DtsDebugHost.exe ซึ่งควรจะปล่อยไฟล์ที่ถูกล็อก


0

ฉันใช้ Visual Studio Code และฉันได้รับข้อผิดพลาดนี้เนื่องจากเซิร์ฟเวอร์ dev กำลังทำงานอยู่ (ฉันรันเซิร์ฟเวอร์ dev โดยการกด Ctrl + F5 )

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


0

ฉันต่อสู้กับปัญหาเป็นเวลา 5 วันและสามารถหาต้นตอของปัญหาผ่านบันทึกของ Event Viewer Logs พอร์ต 443 แอปพลิเคชันของฉันพยายามเข้าถึงถูกใช้งานอยู่ฉันจึงต้องเปลี่ยนการตั้งค่ารีจิสทรี โดยทั่วไปคุณจะสามารถเข้าถึงแหล่งที่มาของปัญหาผ่านบันทึกข้อผิดพลาดในโปรแกรมดูเหตุการณ์

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