2009-07-13 38 views
31

對於我的一個ASP.NET 3.5應用程序,每次嘗試構建Web應用程序時,都會在Visual Studio 2008中引發以下構建錯誤:無法將文件reference.dll複製到bin/reference.dll。該進程無法訪問文件reference.dll,因爲它正在被另一個進程使用

錯誤165無法複製文件 「C:\ InOne公司\ COMMON \ DexProcessor \ BIN \調試\ DexProcessor.dll」 到 「BIN \ DexProcessor.dll」。該進程無法訪問文件'bin \ DexProcessor.dll',因爲它正在被另一個進程使用。 InVision2 錯誤166無法將文件「C:\ InOne \ Common \ DexParser \ bin \ Debug \ InOne.DexParser.dll」複製到「bin \ InOne.DexParser.dll」。該進程無法訪問文件'bin \ InOne.DexParser.dll',因爲它正在被另一個進程使用。 InVision2 錯誤167無法將文件「C:\ InOne \ Common \ AlertProcessor \ bin \ Debug \ InOne.Invision.AlertProcessing.dll」複製到「bin \ InOne.Invision.AlertProcessing.dll」。該進程無法訪問文件'bin \ InOne.Invision.AlertProcessing.dll',因爲它正在被另一個進程使用。 InVision2 錯誤168無法將文件「C:\ InOne \ Common \ InVision.BusinessLogic \ bin \ Debug \ InVision.BusinessLogic.dll」複製到「bin \ InVision.BusinessLogic.dll」。該進程無法訪問文件'bin \ InVision.BusinessLogic.dll',因爲它正在被另一個進程使用。 InVision2 錯誤169無法將文件「C:\ InOne \ Common \ InVision.Common \ bin \ Debug \ InVision.Common.dll」複製到「bin \ InVision.Common.dll」。該進程無法訪問文件「bin \ InVision.Common.dll」,因爲它正在被另一個進程使用。 InVision2 錯誤170無法將文件「C:\ InOne \ Data \ bin \ Debug \ InVision.Data.dll」複製到「bin \ InVision.Data.dll」。該進程無法訪問文件'bin \ InVision.Data.dll',因爲它正在被另一個進程使用。 InVision2 錯誤171無法將文件「C:\ InOne \ Common \ InVision.DataAccessLayer \ bin \ Debug \ InVision.DataAccessLayer.dll」複製到「bin \ InVision.DataAccessLayer.dll」。該進程無法訪問文件'bin \ InVision.DataAccessLayer.dll',因爲它正在被另一個進程使用。 InVision2 錯誤172無法將文件「C:\ InOne \ Common \ InVision.DataAccessLayer.SqlClient \ bin \ Debug \ InVision.DataAccessLayer.SqlClient.dll」複製到「bin \ InVision.DataAccessLayer.SqlClient.dll」。該進程無法訪問文件「bin \ InVision.DataAccessLayer.SqlClient.dll」,因爲它正在被另一個進程使用。 InVision2

這剛剛開始發生在一個星期前,非常討厭...我必須進入網絡應用程序的bin文件夾並刪除pdb文件,然後它會讓我刪除dll的大部分時間。每隔一段時間它不會讓我這樣,我必須關閉Visual Studio,然後它可以讓我刪除它們。我檢查了它是Visual Studio(devenv),它鎖定了dll的。重啓機器並沒有幫助。

這實際上降低了我的生產力,有什麼我可以做的解決這個問題嗎?


如前所述,Visual Studio 2008(devenv.exe)是鎖定DLL的過程。

我注意到了一些東西......編譯成功後,它將所有DLL複製到bin文件夾中,然後全部刪除,然後將新的一組複製到bin中。當它不成功時,第一組DLL被複制,然後失敗。所以它似乎是使用bin文件夾的兩件事,當它只應該是1.這是否有幫助?

回答

18

問題結束了,在web.config中有人說:

hostingEnvironment shadowCopyBinAssemblies="false" 

評論了這一點之後,一切都開始建設確定。什麼樣的惡夢!!

0

您可以下載優秀的SysInternals Handle程序。這將告訴你哪些進程對相關文件有鎖定。

如果是外部程序(例如病毒掃描程序/索引器),那麼這應該有所幫助。如果它只是將Visual Studio(devenv.exe)報告爲罪魁禍首,那麼它的幫助就會小一些!

0

我假設你已經知道它是鎖定文件的VS2008。你可以嘗試從命令行運行MSBuild,看看問題是否消失。不幸的是,在一些難以預測的情況下,Visual Studio可以保持文件不被鎖定。

0

文件鎖只是使用Visual Studio的一部分。沒有什麼好的方法來解決這個問題。

+2

嗨,大家好。前兩個,我已經檢查過,它是鎖定文件的Visual Studio。 對克里斯,這怎麼可能是一個答案?幾乎每次構建Web項目時都會失敗,因爲Visual Studio正在使用被複制到Web bin的引用項目dll。這意味着我需要關閉並重新打開Visual Studio,以便幾乎每次構建......這不是解決方案!這不是在解決方案或項目中發生,所以這是一個特定於這個Web項目,所以說這只是Visual Studio的一部分是廢話... – Justin 2009-07-13 19:42:29

+0

翻轉「本地複製程序集」選項 – 2009-07-13 20:28:49

+1

感謝,讓我關。剩下的唯一編譯錯誤是: 「無法將obj \ debug \ web.dll複製到bin \ web.dll。由於bin \ web.dll因爲被另一個進程使用而無法訪問該文件。」 – Justin 2009-07-13 21:49:23

0

在SP1中修復了Visual Studio 2008中的一個特定的錯誤,這可能是您的問題。它會在您引用嵌入式JavaScript文件並導致您看到的問題時發生。有關更多詳細信息,請參閱here

+1

我已經在使用SP1,抱歉,我應該指定。 – Justin 2009-07-13 20:24:38

1

嗨我一會兒面臨同樣的問題。這非常煩人。

我有一個更容易但不是很有效的解決方案。 清理項目或解決方案可解決問題。

+0

我有一個與WinForms應用程序相同的問題;清理項目確實解決了這個問題。很奇怪 - 我們希望這個錯誤已經從VS2010中消失了。 – 2009-11-04 12:53:35

+0

大聲笑。對不起,這個錯誤仍然在VS2012中。 – willem 2013-04-09 07:12:52

12

我已經爲這個問題奮鬥了一年!

您是否嘗試將此添加到您的PREBUILD事件?

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

更多信息請參閱本: http://nayyeri.net/file-lock-issue-in-visual-studio-when-building-a-project

這裏是另一個線程,擁有更多的事情嘗試...

http://social.msdn.microsoft.com/forums/en-US/Vsexpressinstall/thread/5b71eb06-5047-483d-8fd3-b75c102d41e9/?prof=required

+0

第一個網址已損壞;僅供參考。 – FMFF 2015-08-06 16:45:17

10

什麼工作對我來說是以下預編譯事件:

if exist "$(TargetPath).locked.bak" del "$(TargetPath).locked.bak" 
if exist "$(TargetPath).bak" del "$(TargetPath).bak" 
if exist "$(TargetPath).locked" ren "$(TargetPath).locked" "$(TargetFileName).locked.bak" 
if exist "$(TargetPath)" ren "$(TargetPath)" "$(TargetFileName).bak" 

我在我的案例中注意到2個文件正在被創建並且不能被刪除。但是,您可以重命名它們(如果您嘗試刪除它們,它們仍在使用中)。在下一個版本中,重命名的文件不再被使用(鎖被刪除),它們可以被刪除,這就是上面的腳本所做的,之後它可以安全地重命名新的鎖定文件,所以在生成建立輸出。

在這裏和其他地方發佈的其他預生成事件並沒有幫助我很多(他們只在一個額外的版本或只有少數人在問題再次出現之前工作)。所以現在我正在使用上面發佈的一個用於我的調試目的。

0

我確實有simillar問題 我的解決方案是看*。的csproj文件,並根據我找到丟失的文件,因此以下是正確的,所以我剛剛刪除線和它的工作馬上

0

刪除以下行從我的app.config解決了這個對我來說 - 我使用VS2010。

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="nunit.framework" publicKeyToken="96D09A1EB7F44A77" culture="neutral"/> 
      <bindingRedirect oldVersion="0.0.0.0-2.5.7.10213" newVersion="2.5.7.10213"/> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 
0

檢查用戶dll和引用dll的應用程序是否以相同的.NET框架爲目標。 我有一個框架是不同的,導致這個問題的情況。

4

我只是想說,這個問題從今天開始。 (VS 2010,C#)我一直在研究這個程序一個月沒有這個問題,現在開始了。我開始VS,更改代碼,編譯和測試並退出程序。進行另一次更改,編譯和BOOM無法將文件「obj \ x86 \ Debug \ progname.exe」複製到「bin \ Debug \ progname.exe」,因爲如果正被另一個進程使用。

ProcExp顯示了使用此文件只的Visual Studio(實際上devenv.exe的)。只有一個VS運行的實例。在我的debug \ progname.exe上有兩個列表,一個是類型DLL,另一個是類型句柄。

使用devenv的/ ResetSettings並沒有解決任何問題,但浪費了10分鐘把一切回到了我需要的視圖。

使用上述PREBUILD事件重命名技巧解決了一些更改的問題,但在下一次更改時,「exe.locked」文件被鎖定並且無法刪除。然後重命名失敗。

即使關閉項目後,debug \ progname.exe文件名仍然保持鎖定狀態。

關閉VS,手動刪除debug文件夾中的文件,打開VS和我的解決方案,然後建設 - >清理解決方案似乎爲我工作的,至少其現在的工作我做了所有的這些東西之後。

希望這有助於 -rwg

4

我沒有任何運氣不幸的是,預先建立的事件。典型的IT Crowd風格的工作是退出Visual Studio並重新打開它。

0

該文件無法刪除,幸運的是可以重命名和移動。因此,我創建預生成批(使用日期和時間作爲隨機字符串,可以有更簡單的方法):

For /f "Tokens=2,3,4 Delims=/. " %%i In ("%Date%") Do @(
    Set Month=%%i& Set Day=%%j& Set Year=%%k 
) 

set ActDate=%Year%-%Month%-%Day% 

For /f "Tokens=1,2,3 Delims=/.:, " %%i In ("%Time%") Do @(
    Set Hour=0%%i& Set Min=%%j& Set Sec=%%k 
) 

set ActTime=%Hour:~-2,2%-%Min%-%Sec% 

move c:\MyProject\bin\Debug\myproject.exe c:\garbage\%ActDate%_%ActTime%_myproject.exe 
2

爲Windows 7簡易修復: 啓動服務「應用體驗」。在「控制面板」中搜索「服務」。

-Martin

1

只需轉到\ Debug \ bin並刪除所有.dll文件。

對我很好。

1

我從微軟引用程序文件夾System.Web.Extensions.dll Web項目這一問題。在參考屬性中將「複製本地」設置爲false可修復它。

0

此使用視覺NUnit的單元測試時,發生在我身上的時候。

看來進程的VisualNunitRunner.exe「鎖定目標目錄的.dll文件。

我用Unlocker找到進程,殺死它或解鎖文件。

2

如果您有Visual NUnit的,它必須被鎖定的dll文件來解決這個問題。

  1. 關閉VS
  2. 轉到TAKS管理器,殺死視覺NUnit的過程
  3. 現在打開VS和建設項目
0

發生在我剛纔。必須殺死所有devenv.exe進程(關閉VS 2010窗口後有3個進程)。

0

從bin \ Debug文件夾中刪除二進制文件並重新編譯它們。這適用於我!

0

當您將項目從一個目錄更改爲另一個目錄時,通常會發生此問題。對於卷影副本錯誤或者你自己加入這一行你web.config.To解決此問題遵循以下

在web.config文件中是否有類似

<hostingEnvironment shadowCopyBinAssemblies="false" />

變化是成

<hostingEnvironment shadowCopyBinAssemblies="true" />

或刪除它。然後它會正常工作

0

我開始使用Visual Studio 2012時,這已經發生在一個7年的解決方案上(第二次或第三次:我以前曾經遇到過這個問題)。

我試過各種伏都教。我清理了解決方案。沒有工作。我重新啓動了Visual Studio。沒有工作。我確信最後一個會起作用,因爲那是上次工作的巫術。

最後,我記得昨天晚上安裝了一個安全更新,並在今天早上開始使用我的機器時進行了配置 - (連接與否?沒有任何想法) - 因此,我重新啓動了Windows,並且嗚嗚,它再次像魔術一樣工作。

感謝MS更多的介意。

0

我也遇到這個問題。首先,我嘗試刪除有爭議的.dll,但它顯示Access被拒絕,然後關閉我的VS並打開後,它工作正常。

0

到Benoit的答案相似,但不需要任何工具安裝,您可以用「/ m」開關命令行中使用任務列表(任務管理器)命令來獲得使用DLL進程的列表:

tasklist/m mylocked.dll

我看到一些帖子指出你必須從違規DLL的目錄中做到這一點,但我沒有發現這種情況。

0

您還可以在解決方案中的所有項目中刪除bin和obj文件夾,然後重建解決方案。

0

打開資源管理器中單擊項目的bin文件夾的屬性,並取消這一項工作在我xamarin形式只讀物業項目

相關問題