2011-12-20 79 views
2

我有一個類庫,我維護它自己的項目/解決方案。它包含了我編寫的一些基本功能,主要用於一些較早的VB.NET應用程序。無法加載參考庫 - 進程無法訪問文件,因爲它正在被另一個進程使用

我正在做一些這樣的應用程序的工作,它需要對庫程序集以及主應用程序進行更改。然而,我發現,當我改變和編譯庫,我來的時候重新編譯應用程序主我得到一個錯誤:

Error 8 Unable to load referenced library 'myLibrary.dll': The process cannot access the file because it is being used by another process. 

我指定了「在MyLibrary \ BIN \發佈\在MyLibrary .dll'作爲主項目的參考。我知道在過去我已經在同一個解決方案中使用了庫項目,因此我可以將該項目指定爲引用,而不是發佈DLL,但我更願意將項目分開。

重新指定引用或重新加載主項目可以解決問題(至少暫時),但我寧願找到更復雜的解決方案。

+0

我確實想把它作爲一個獨立的庫 - 現在我不記得了,但是我在引用該項目時遇到了一些問題。我想我會嘗試通過構建後事件複製輸出,只是爲了完整性。你能詳細說明爲什麼你認爲引用該項目是首選嗎? – CJM 2011-12-20 15:06:17

+0

@David - 我在一段時間內還沒有回到這個問題,但是IIRC的建議(同樣的VS解決方案)是唯一提供喘息機會的東西。如果你喜歡把它作爲答案,你會得到讚揚。 – CJM 2012-03-12 17:00:32

回答

2

爲什麼寧願讓它們分開?如果他們是同一代碼庫的一部分,他們應該在同一個解決方案中。通過短路這種做法,您可以有效地限制Visual Studio的開發功能與代碼庫中引用的程序集有關。另外,引用bin的輸出非常混亂。如果你想讓它成爲一個獨立的庫,讓它構建它的輸出並將該輸出複製到某個地方的lib文件夾。然後你可以引用最終的輸出,而不是高度瞬態的bin目錄。

本質上,就「找到更復雜的解決方案」而言,這是使用Visual Studio提供的工具的問題。將代碼組織到解決方案文件中是該工具的一部分。

2

當Visual Studio刷新它的Intellisense數據庫時,它將鎖定它當前正在處理的文件(.dll或.exe)。如果我沒有記錯,它會在每次重建解決方案時刷新Intellisense數據庫(儘管如此,請不要引用我)。在您嘗試重新編譯或運行之前,請嘗試等待VS完成其Intellisense內容。

+0

感謝丹尼爾,但這個問題一直存在,直到我重新創建引用或重新加載項目...我已經離開了30多分鐘的嘗試之間。 – CJM 2011-12-21 21:09:23

+1

您也可以安裝[Unlocker](http://www.filehippo.com/download_unlocker/)並查看哪個進程鎖定了該文件。至少這會讓你知道下一步要看的地方。另外,如果您打開了多個Visual Studios,它們可能會在文件上相互衝突。 – 2011-12-21 21:13:56

+0

「多個版本的Studio打開」是我的問題。謝謝。 – Paul 2017-05-24 17:41:07

相關問題