2011-08-04 62 views
11

在Visual Studio 2008中,我有一個相當大的.NET 2.0解決方案(151個項目)。通常情況下,當我在VS中進行構建時(即使只是一個項目)一個錯誤說它無法將我的DLL程序集中的一個複製到輸出目錄,因爲它正在使用中。我沒有任何其他進程在後臺運行或現有的調試會話正在使用此程序集。如果我打開Process Explorer並搜索這個程序集名稱,Visual Studio(devenv.exe)就會成爲唯一的結果。查看結果由於某種原因,Visual Studio將我的程序集作爲DLL加載。關閉解決方案並重新打開它並不能解決問題。我必須完全退出VS才能解決這個頗具破壞性的問題。有誰知道發生了什麼事?我在Window 7上運行,我不認爲我在Windows XP上看到過這個問題。無法編譯,因爲Visual Studio正在使用我的DLL

我正在運行Visual Studio 2008版本9.0.30729.1 SP。如果有問題,我也在運行ReSharper 6。

+0

你的應用程序做了什麼?它是多線程的,也許你在停止程序執行時沒有正確地殺死一個線程? –

+0

@Snorfus - 他的程序確實不重要。它的多線程也並不重要,當他試圖構建解決方案時,問題就出現了,所以程序本身甚至沒有在那個時候運行。 Visual Studio確實保留了一切便利,以便在項目中引用圖書館解決方案。它可能會感到困惑,並且在重建和/或構建之前不會釋放它。 –

+0

可能的重複:http://stackoverflow.com/questions/2002273/visual-studio-locks-output-file-on-build –

回答

3

有沒有人有任何想法是怎麼回事?我在Windows 7上運行,我不認爲我在Windows XP上看到過這個問題。

我在Windows XP和碰到這個問題,所有的時間它甚至沒有本地化到Visual Studio 2008的什麼東西對我的作品是我簡單幹淨的所有解決方案,該出手,可能是在任何文件中的我係統的內存,因爲Visual Studio。

Visual Studio將任何引用保留在內存中,因此當其中一個引用更新時,Visual Studio必須將其從內存中釋放。如果真的發生得更多,那麼可能會考慮減少項目中解決方案的數量。

+0

我會在下次發生這種情況時嘗試乾淨的解決方案。我真的不喜歡做一個乾淨的事情,因爲它抹去了過程創建/使用的所有臨時和配置文件。由於我有這麼多項目有這種情況,重新啓動VS實際上可能不那麼痛苦。 – Dennis

+0

如果清潔解決方案不起作用,接下來要嘗試的是(1)關閉解決方案,(2)重新打開解決方案。關閉解決方案應該強制VS釋放它爲該解決方案加載的所有DLLS。 –

0

我猜測該DLL正在被(ProjectName).vshost.exe進程使用。您可以嘗試殺死該進程並查看是否有效。可能不是最好的事情,但它可能比重新啓動VS更容易。

+0

不,不涉及vshost進程。根據Process Explorer,唯一使用它的進程是devenv.exe(Visual Studio本身)。它將它作爲一個DLL打開(不是可以從Process Explorer手動關閉的文件句柄)。 – Dennis

0

我會在構建之前嘗試「清理解決方案」選項。這可以清理任何可能因程序崩潰而掛起的無關臨時文件。

0

我不知道爲什麼這個工作,但我有同樣的問題,當我將開始項目更改爲項目我想建立一切再次工作。

當我將Startup項目再次更改爲正確的項目時,由於文件正在使用中,我無法再構建其他項目,因此看起來像Visual Studio IDE中的錯誤。

1

使用下面的命令,並將其放在「預生成事件」的Visual Studio:

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

希望這會幫助你。

1

嘗試禁用託管過程:

在Visual Studio中打開一個可執行項目。不生成可執行文件的項目(例如,類庫或服務項目)不具有此選項。

  1. 在項目菜單上,單擊屬性。

  2. 單擊調試選項卡。

  3. 清除啓用Visual Studio宿主進程複選框。

0

殺死進程VBCSCompiler.exe並重建。

相關問題