2013-10-29 82 views
11

我已經通過項目屬性爲我的.dll項目設置了輸出文件夾,我稱之爲「輸出」。vshost.exe不斷更新我的.dll文件,我無法更新它

問題是,從一個空的輸出文件夾,我第一次生成項目,沒關係。第二次,我收到以下錯誤:

Error 328 Unable to copy file "obj\Release\MyLibrary.dll" to "......\Output\Release\MyLibrary.dll". The process cannot access the file '......\Output\Release\MyLibrary.dll' because it is being used by another process.

「另一個進程」是Visual Studio中的vshost.exe。由於它保持訪問MyLibrary.dll,它不能被刪除或替換,爲什麼錯誤。這使輸出文件夾上的MyLibrary.dll不會更新。不過,在我的解決方案中,我還有其他.dll項目,但這並不會發生。

我迄今用來更新它的解決方案是關閉VS(因此關閉vshost.exe),然後運行一個.bat文件,該文件刪除文件Output \ Release \ MyLibrary.dll,然後再次打開VS並重建它的項目。

我對vshost.exe的確切工作知之甚少,所以我不知道從哪裏開始從根清除此問題。我不知道爲什麼這發生在一個特定的.dll。我很感激任何幫助我調查爲什麼發生這種情況的想法。

+0

自從Visual Studio 2005發生這種事以後,每隔一段時間,沒有特別的原因。我發現的唯一方法就是和你一樣。 – SimonGoldstone

+0

調試器分離後,可能會繼續進行。即線程上的一些正在進行的代碼或其他。 –

+0

當我在一個Visual Studio會話中編譯了一個庫並在另一個Visual Studio會話中調試應用程序時,我遇到了這個問題。在找到庫代碼中的錯誤並重新編譯之後,重建之後,它無法刷新庫的應用程序副本。 –

回答

14

vshost.exe是Visual Studio宿主進程。這是一個自定義的CLR主機,可以加載您的EXE並使調試更加輕鬆。你可以把它關掉,這個副作用很少。項目+屬性,調試選項卡,取消選中「啓用Visual Studio託管過程」選項。

你現在更可能在程序中發現真正的問題。最常見的問題是您的程序在您提出要求時不會退出。你將仍然得到一個構建錯誤,你現在會看到你自己的EXE指針,鎖定在DLL上。您還將在任務管理器的「進程」選項卡中看到它。這也可以讓你殺死它。

我不清楚程序員如何重新創建這個問題。按Ctrl + F5而不是F5肯定會這樣做,在啓動程序時總是按F5立即連接調試器。使用調試器+停止調試現在可以停止程序。否則,您可以使用工具+附加到進程以稍後再次獲取調試器,以找出您的程序正在執行的操作。

反惡意軟件是值得一提的常見災難,他們得到的方式太激動時,他們看到一個可執行文件從無處出現。如果你使用Avast,那麼就完全卸載它,它與VS不兼容。

+3

它通過在使用dll的可執行文件的項目中取消標記「啓用Visual Studio宿主進程」來解決該問題。感謝您的精心解答。 –