ปรับปรุง: โครงการตัวอย่างการทำซ้ำข้อผิดพลาดนี้สามารถพบได้ที่นี่ที่ Microsoft Connect ฉันได้ทดสอบและตรวจสอบแล้วว่าโซลูชันที่ให้ในคำตอบที่ยอมรับด้านล่างใช้ได้กับโครงการตัวอย่างนั้น หากวิธีนี้ไม่ได้ผลสำหรับคุณคุณอาจประสบปัญหาอื่น (ซึ่งเป็นของคำถามอื่น)
นี่เป็นคำถามที่ถามมาทั้งที่นี่ใน Stack Overflow และที่อื่น ๆ แต่ไม่มีคำแนะนำใด ๆ ที่ฉันพบว่าไกลเท่านี้ช่วยฉันได้ดังนั้นฉันต้องลองถามคำถามใหม่
สถานการณ์สมมติ: ฉันมีแอปพลิเคชัน Windows Forms อย่างง่าย (C #, .NET 4.0, Visual Studio 2010) มันมีรูปแบบฐานสองสามรูปแบบที่ส่วนใหญ่สืบทอดมาจากนั้นใช้ Entity Framework (และคลาส POCO) สำหรับการเข้าถึงฐานข้อมูล ไม่มีอะไรแฟนซีไม่มีเธรดหลายอย่างหรืออะไรเลย
ปัญหา: ทุกอย่างใช้ได้ดีชั่วขณะหนึ่ง จากนั้นทั้งหมด Visual Studio ไม่สามารถสร้างเมื่อฉันกำลังจะเปิดแอปพลิเคชัน ฉันได้รับคำเตือน"ไม่สามารถลบไฟล์ '... bin \ Debug \ [ProjectName] .exe' การเข้าถึงพา ธ '... bin \ Debug \ [ProjectName] .exe' ถูกปฏิเสธ" และข้อผิดพลาด"ไม่สามารถคัดลอกไฟล์ 'obj \ x86 \ Debug \ [ProjectName] .exe' เป็น 'bin \ Debug \ [ProjectName] .exe' กระบวนการไม่สามารถเข้าถึงไฟล์ 'bin \ Debug \ [ProjectName] .exe 'เพราะกระบวนการอื่นกำลังถูกใช้อยู่ " (ฉันได้รับทั้งคำเตือนและข้อผิดพลาดเมื่อเรียกใช้ Rebuild แต่เฉพาะข้อผิดพลาดเมื่อเรียกใช้ Build - ไม่คิดว่าเกี่ยวข้องหรือไม่)
ฉันเข้าใจดีว่าสิ่งที่คำเตือนและข้อความแสดงข้อผิดพลาดบอกว่า: Visual Studio พยายามที่จะเขียนทับไฟล์ exe อย่างชัดเจนในขณะที่มันล็อคด้วยเหตุผลบางประการ อย่างไรก็ตามสิ่งนี้ไม่ได้ช่วยฉันหาวิธีแก้ปัญหา ... สิ่งเดียวที่ฉันพบว่าใช้งานได้คือปิด Visual Studio แล้วเริ่มใหม่อีกครั้ง การสร้างและการเปิดตัวใช้งานได้จนกระทั่งฉันทำการเปลี่ยนแปลงในบางรูปแบบจากนั้นฉันก็มีปัญหาเดียวกันอีกครั้งและต้องรีสตาร์ท ... ค่อนข้างน่าผิดหวัง!
ดังที่ฉันได้กล่าวไปแล้วสิ่งนี้ดูเหมือนจะเป็นปัญหาที่ทราบแล้วดังนั้นจึงมีคำแนะนำมากมาย ฉันจะทำรายการสิ่งที่ฉันได้ลองที่นี่เพื่อให้ผู้คนรู้ว่าจะข้ามไป:
- การสร้างโซลูชันใหม่ที่สะอาดและเพียงคัดลอกไฟล์จากโซลูชันเก่า
การเพิ่มสิ่งต่อไปนี้เข้ากับเหตุการณ์ก่อนสร้างโครงการ:
if exist "$(TargetPath).locked" del "$(TargetPath).locked" if not exist "$(TargetPath).locked" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked"
การเพิ่มสิ่งต่อไปนี้เข้ากับคุณสมบัติโครงการ (ไฟล์. csproj):
<GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
อย่างไรก็ตามไม่มีพวกเขาทำงานให้ฉันดังนั้นคุณอาจจะเห็นว่าทำไมฉันถึงเริ่มรู้สึกท้อแท้ ฉันไม่รู้ว่าจะมองที่อื่นดังนั้นฉันหวังว่าจะมีใครบางคนให้ฉัน! นี่เป็นข้อบกพร่องใน VS หรือไม่และถ้าเป็นเช่นนั้นจะมีโปรแกรมแก้ไขหรือไม่ หรือฉันทำสิ่งผิดปกติฉันมีการอ้างอิงแบบวงกลมหรือคล้ายกันและหากเป็นเช่นนั้นฉันจะทราบได้อย่างไร
ข้อเสนอแนะใด ๆ ที่ชื่นชมอย่างมาก :)
อัปเดต:ตามที่กล่าวไว้ในความคิดเห็นด้านล่างฉันได้ตรวจสอบโดยใช้ Process Explorer ว่าจริงๆแล้วเป็น Visual Studio ที่ล็อคไฟล์