对于我的一个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。这有帮助??
答案 0 :(得分:18)
问题最终是在web.config中有人添加了:
hostingEnvironment shadowCopyBinAssemblies="false"
评论完之后,一切都开始建立好了。真是个噩梦!
答案 1 :(得分:13)
使用ProcessExplorer与find 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
这是另一个主题,有更多的事情要尝试......
答案 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文件。
答案 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)
答案 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)作为罪魁祸首,那么它将没那么帮助!