无法将文件reference.dll复制到bin / reference.dll。该进程无法访问文件reference.dll,因为它正由另一个进程使用

时间:2009-07-13 18:53:37

标签: visual-studio visual-studio-2008

对于我的一个ASP.NET 3.5应用程序,每次尝试构建Web应用程序时,它都会在Visual Studio 2008中引发以下构建错误:

  

错误165无法将文件“C:\ InOne \ Common \ DexProcessor \ bin \ Debug \ 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然后它才能让我删除它们。我检查了它是锁定dll的Visual Studio(devenv)。重新启动机器没有帮助。

这真的会降低我的工作效率,我有什么办法可以解决这个问题吗?


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

我注意到了......当它成功编译时,它将所有DLL复制到bin文件夹中,然后将它们全部删除,然后将新的集合复制到bin中。如果不成功,则复制第一组DLL,然后失败。所以它似乎是使用bin文件夹2个东西,它应该只为1。这有帮助??

32 个答案:

答案 0 :(得分:18)

问题最终是在web.config中有人添加了:

hostingEnvironment shadowCopyBinAssemblies="false"

评论完之后,一切都开始建立好了。真是个噩梦!

答案 1 :(得分:13)

使用ProcessExplorerfind out what process has the file open并从那里开始。

如果进程当前正在使用这些DLL,则无法删除并重写它。在编译时,您必须使用这些DLL来终止或以其他方式停止进程。

答案 2 :(得分: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

答案 3 :(得分: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个文件,无法删除。但是,您可以重命名它们(如果您尝试删除它们,它们仍在使用中)。在下一个版本中,重命名的文件不再使用(锁定被删除)并且可以删除它们,这就是上面的脚本所做的事情,之后它可以安全地重命名新的锁定文件,这样就不会产生问题。建立输出。

此处和其他地方发布的其他预构建事件对我没有多大帮助(它们仅用于一次额外构建或仅在问题再次出现之前进行了一些)。所以现在我正在使用上面发布的那个用于我的调试目的。

答案 4 :(得分:4)

遗憾的是,我对预制活动没有任何好运。以典型的IT Crowd方式起作用的是退出Visual Studio并重新打开它。

答案 5 :(得分:4)

我只是想说今天这个问题始于我。 (VS 2010,C#)我一直在研究这个程序一个月没有这个问题,现在它已经开始了。我启动VS,更改代码,编译和测试并退出程序。进行另一个更改,编译和BOOM无法将文件“obj \ x86 \ Debug \ progname.exe”复制到“bin \ Debug \ progname.exe”,因为正在被另一个进程使用。

ProcExp仅显示使用此文件的Visual Studio(实际上是devenv.exe)。只有一个VS运行实例。我的debug \ progname.exe上有两个列表,一个是Type DLL,另一个是Type句柄。

使用devenv / ResetSettings没有解决任何问题,但浪费了10分钟,将所有内容都恢复到我想要的视图。

使用上面提到的PREBUILD事件重命名技巧解决了一些更改的问题,但是在下一次更改时,“exe.locked”文件被锁定且无法删除。然后重命名失败。

即使在关闭项目后,debug \ progname.exe文件名仍保持锁定状态。

关闭VS,手动删除调试文件夹中的文件,打开VS和我的解决方案,然后Build-> Clean Solution似乎对我有用,至少它在我完成所有这些工作后现在正在工作。

希望这会有所帮助 -rwg

答案 6 :(得分:2)

如果你有Visual Nunit,它必须是锁定dll文件。

  1. 关闭VS
  2. 转到taks经理,杀死Visual Nunit进程
  3. 现在打开VS并构建项目

答案 7 :(得分:2)

Windows 7的简易修复: 启动服务“应用程序体验”。在“控制面板”中搜索“服务”。

-Martin

答案 8 :(得分:1)

嗨,我有一段时间面临同样的问题。这很烦人。

对于这个问题,我有一个更简单但不那么有效的解决方案。 清理项目或解决方案可以解决问题。

答案 9 :(得分:1)

只需转到\ Debug \ bin并删除所有.dll文件。

为我工作很棒。

答案 10 :(得分:1)

我在使用Microsoft Reference Assemblies文件夹中的System.Web.Extensions.dll的Web项目中遇到此问题。在参考属性中将“复制本地”设置为false修复它。

答案 11 :(得分:0)

您还可以删除解决方案中所有项目中的bin和obj文件夹,然后重建解决方案。

答案 12 :(得分:0)

与Benoit的答案类似,但不需要安装任何工具,您可以在命令行中使用任务列表(任务管理器)命令' / m'切换到使用dll获取进程列表:

tasklist / m mylocked.dll

我看到一些帖子表明你必须从有问题的dll的目录中进行,但我还没有发现是这样的。

答案 13 :(得分:0)

我也面临这个问题。首先我尝试删除有争议的.dll,但它显示Access拒绝,然后我关闭我的VS,打开后,它工作正常。

答案 14 :(得分:0)

在资源管理器中打开你的项目点击bin文件夹的属性,取消选中这个在我的xamarin表单项目中工作的只读属性

答案 15 :(得分:0)

我终于如何修复它。它发布是因为第一个调试exe仍在运行。所以,转到任务管理器 - >处理标签 - > [你的项目名称exe]结束了exe进程

答案 16 :(得分:0)

当我开始使用7年前的解决方案时,我正在使用Visual Studio 2012(第二次或第三次:我之前已经讨论过这个问题)。

我尝试了各种伏都教。我清理了解决方案。没工作。我重新启动了Visual Studio。没工作。我确信最后一个会起作用,因为那是上次工作的伏都教。

最终,我记得昨晚安装了一个安全更新,当我今天早上启动机器时进行了配置 - (连接与否?没有想法) - 所以,我重启了Windows,瞧,这一切都像魔术一样。

感谢MS提供更多心灵切割。

答案 17 :(得分:0)

遇到此问题。 知道我已经通过git bash运行该项目。 停了现在可以正常工作了。

因此,如果您从本地的任何地方运行了相同的项目,则可能会发生此错误。因此,请停止正在运行的程序,然后再次执行。

答案 18 :(得分:0)

将项目从一个目录更改为另一个目录时,通常会发生此问题。对于Shadow复制错误,您可能已在web.config中添加了此行。要解决此问题,请遵循以下

在你的web.config文件中,如果有类似

的内容

<hostingEnvironment shadowCopyBinAssemblies="false" />

将其更改为

<hostingEnvironment shadowCopyBinAssemblies="true" />

或删除它。然后它会正常工作

答案 19 :(得分:0)

从bin \ Debug文件夹中删除二进制文件并重新编译它们。这对我有用!!!

答案 20 :(得分:0)

我已通过 TaskManager --> 详细信息下的 Terminate .exe 解决了错误。

现在构建您的解决方案

enter image description here

答案 21 :(得分:0)

刚才发生在我身上。不得不杀死所有devenv.exe进程(关闭VS 2010窗口后有3个进程)。

答案 22 :(得分:0)

我有类似的问题,可以通过更改'AssemblyInfo.cs'来解决它

Visual Studio build fails: unable to copy exe-file from obj\debug to bin\debug

答案 23 :(得分:0)

有时在使用 Visual Nunit 进行单元测试时会发生这种情况。

似乎进程'VisualNunitRunner.exe'锁定目标目录中的.dll文件。

我使用Unlocker查找进程,终止进程或解锁文件。

答案 24 :(得分:0)

该文件无法删除,幸运的是可以重命名和移动。所以我创建了prebuild批处理(使用日期和时间作为随机字符串,可以有更简单的方法):

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

答案 25 :(得分:0)

检查用户dll和引用dll的应用程序是否针对同一.NET框架。 我有一个案例,框架不同导致了这个问题。

答案 26 :(得分: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>

答案 27 :(得分:0)

我确实遇到过类比问题 解决方案对我来说是查看* .csproj文件,在我找到丢失的文件,所以下面是正确的,所以我只是删除行,它立即工作

答案 28 :(得分:0)

Visual Studio 2008中有一个特定的错误已在SP1中修复,这可能是您的问题。当您引用嵌入的JavaScript文件并导致您看到的问题时,就会发生这种情况。有关详细信息,请参阅here

答案 29 :(得分:0)

文件锁只是使用Visual Studio的一部分。没有什么好方法可以解决这个问题。

答案 30 :(得分:0)

我假设你已经知道它是锁定文件的VS2008。您可以尝试从命令行运行MSBuild,看看问题是否消失。不幸的是,在一些难以预测的情况下,Visual Studio可以在文件锁定时保持文件锁定。

答案 31 :(得分:0)

您可以下载优秀的SysInternals Handle计划。这将告诉您哪些进程锁定了相关文件。

如果是外部程序(例如病毒扫描程序/索引器),那么这应该会有所帮助。如果它只是报告Visual Studio(devenv.exe)作为罪魁祸首,那么它将没那么帮助!