我在构建VS2012 C#项目期间一直收到此错误
Error 41 Could not copy "obj\Debug\WeinGartner.WeinCad.exe" to
"bin\Debug\WeinGartner.WeinCad.exe".
Exceeded retry count of 10. Failed.
Error 42 Unable to copy file "obj\Debug\WeinGartner.WeinCad.exe" to
"bin\Debug\WeinGartner.WeinCad.exe". The process cannot access the file
'bin\Debug\WeinGartner.WeinCad.exe' because it is being used by another
process.
现在我已经发现杀死这个过程
Weingartner.WeinCad.vhost.exe
有效(有时),但这让我感到紧张。有什么方法可以阻止这种情况发生吗?
我的调试器设置是
答案 0 :(得分:325)
我在Visual Studio 2013中遇到类似的错误消息。
大多数情况下,我发现由于异常导致调试过程停止时出现这种情况。
当clean + build没有为我解决这个问题时,我通过以下方式取得了成功:
bin
和obj
文件夹以及自Visual Studio 2003以来,这个“bug”已经存在。
最后,我还发现我可以通过简单地重命名可执行文件然后删除它来解决这个问题。
答案 1 :(得分:105)
在Visual Studio Premium 2013(更新3)中,我使用预构建的单行解决了这个问题:
(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb)
这可以优雅地删除任何旧的PDB文件(如果可以),然后重命名带有.old.pdb
扩展名的任何内容。一个很好的副作用是,如果旧的PDB仍然被锁定,它只是将另一个.old片段添加到文件名中,并且下次重新启动Visual Studio并进行构建时它们都会被清除。
例如,构建/调试会话1使MyProject.pdb
锁定
下次你建立:
MyProject.pdb
- > MyProject.old.pdb
然后,启动构建/调试会话2,并且 MyProject.pdb
和MyProject.old.pdb
仍然锁定:
MyProject.old.pdb
- > MyProject.old.old.pdb
MyProject.pdb
- > MyProject.old.pdb
最后,重新启动Visual Studio并进行全新构建将摆脱这两种情况,并照常继续该过程。
答案 2 :(得分:58)
这是因为您已关闭了应用程序,但它仍然在后台运行。
临时解决方案:
永久解决方案:您必须通过编码关闭您的应用程序。这是代码......
System.Windows.Forms.Application.Exit();
您必须将此代码以所有形式放入表单的结束事件中。例如:
private void frm_menu_FormClosing(object sender, FormClosingEventArgs e)
{
System.Windows.Forms.Application.Exit();
}
答案 3 :(得分:25)
但这就是问题 - 您尝试复制的文件被操作系统锁定(即仍在使用),因此它会阻止复制。确保该文件是免费的,您将能够复制。
答案 4 :(得分:21)
我通过在任务管理器中杀死IISExpress来解决它
答案 5 :(得分:20)
您应该禁用防病毒软件(特别是如果它是Avast),然后重试。它帮助了我。问题是调试器/构建器会创建由Avast识别为威胁的.exe文件,因此在VS执行之前就已将其删除。
答案 6 :(得分:15)
我能够通过提供以下预构建操作来修复此问题(VS 2010);
if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
答案 7 :(得分:12)
引用:
解决方法是将其放在>项目的预构建事件命令行属性中(在构建事件选项卡中):
代码段
if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
答案 8 :(得分:6)
杀死进程w3wp.exe(IIS)通常会解决这个问题。
通常,您可以通过导航到bin文件夹并尝试删除它来了解锁定文件的进程。如果另一个进程正在使用它,将弹出的错误消息将包含需要被杀死的进程的名称。
答案 9 :(得分:6)
似乎通过更改项目的程序集名称可以解决问题。
所以不是这个
我将其更改为
请注意,我刚刚将其从Increment and Recall
更改为Increment_Recall
,我刚删除了这些空格。 现在对我来说工作正常。
答案 10 :(得分:6)
在Visual Studio中的某些情况下(Build || Rebuild) 正在运行您遇到此异常的IISExpress:
无法复制文件" obj \ Debug \ YourProjectName.dll" bin \ YourProjectName.dll"。 进程无法访问该文件 ' BIN \ YourProjectName.dll' 因为它正被另一个人使用 过程强>
protected function _construct() { $this->_init('salesrule/coupon_usage', 'first_field,second_field,...'); }
你很好2 GO!
答案 11 :(得分:4)
我在Windows 8上的VS 2012版本11.0.60610.01更新3中面临同样的问题
没有设计器窗口打开,项目是一个简单的控制台应用程序。
由于进程未访问该文件,因此删除访问该文件的vshost进程大部分时间都不起作用。
最简单的解决方法是工作并花费最少的时间是从解决方案中删除项目,在解决方案中构建另一个项目,然后添加原始项目。
这是一种刺激性和浪费时间,但它是我所知道的所有其他选项中最便宜的。
希望这会有所帮助......
答案 12 :(得分:4)
我想我解决了它删除了调试选项中Break all processes when one process breaks
的复选标记(操作的第一个屏幕截图 - >第二个选项)。
由于我取消选中它,它已经建立/运行了一段时间
我在我的项目中使用MySql NET Connector和DevExpress控件。可能是其中一个没有处理连接,绑定等,因为这个标志beeing激活。
编辑:绝对有效!没有更多'无法复制文件'并且不再有表单设计器错误。
答案 13 :(得分:4)
添加主项目的预构建事件taskkill / f / fi“pid gt 0”/ im“YourProcess.vshost.exe”
答案 14 :(得分:3)
我的10美分贡献。
我仍然偶尔会在VS 2015 Update 2上遇到此问题。
我发现切换编译目标解决了这个问题。
试试这个: 如果您在DEBUG中切换到RELEASE并构建,则返回DEBUG。问题消失了。
斯特凡诺
答案 15 :(得分:3)
按照以下步骤
以上步骤永久解决了错误:)
答案 16 :(得分:2)
如果您调试T4模板,则会一直发生这种情况。我的解决方案(在MS修复此问题之前)只是为了杀死这个过程:
任务管理器 - >用户 - > T4VSHostProcess.exe
此过程仅在您调试T4模板时出现,而不是在您运行T4模板时出现。
答案 17 :(得分:2)
如果没有答案可行,请尝试这个简单的检查。 查找运行并保存项目EXE的任何MSbuild.exe。杀死MSBuild.exe,你应该好好去。
答案 18 :(得分:2)
@ Geoff' s(https://stackoverflow.com/a/25251766/3739540)答案很好,但在重新编译时会抛出错误代码1。
这对我有用(2> nul 1> nul on the end + exit 0):
(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb) 2>nul 1>nul
(if exist "$(TargetDir)*old.dll" del "$(TargetDir)*old.dll") & (if exist "$(TargetDir)*.dll" ren "$(TargetDir)*.dll" *.old.dll) 2>nul 1>nul
exit 0
答案 19 :(得分:2)
[为我工作]
答案 20 :(得分:2)
见this other answer。基本上,您可以在后台使用资源文件中运行MSBuild.exe进程。如果您有任何前置或后置构建任务导致MSBuild通过命令行启动,请尝试添加" / nr:false"标志到此命令。但同样,请参阅上一个答案以获取更具体的细节。
答案 21 :(得分:2)
我无法提供解决方案来防止这种情况发生,但您至少可以重命名锁定的文件(Windows资源管理器或经典命令窗口),然后编译/构建。无需重启或重启VS201x。根据一些经验,您可以添加预构建脚本来删除旧文件,或者在没有锁定的情况下重新命名。
答案 22 :(得分:1)
这是一个绝对摆脱这个问题的脚本:
REM This script is invoked before compiling an assembly, and if the target file exist, it moves it to a temporary location
REM The file-move works even if the existing assembly file is currently locked-by/in-use-in any process.
REM This way we can be sure that the compilation won't end up claiming the assembly cannot be erased!
echo PreBuildEvents
echo $(TargetPath) is %1
echo $(TargetFileName) is %2
echo $(TargetDir) is %3
echo $(TargetName) is %4
set dir=C:\temp\LockedAssemblies
if not exist %dir% (mkdir %dir%)
REM delete all assemblies moved not really locked by a process
del "%dir%\*" /q
REM assembly file (.exe / .dll) - .pdb file and eventually .xml file (documentation) are concerned
REM use %random% to let coexists several process that hold several versions of locked assemblies
if exist "%1" move "%1" "%dir%\%2.locked.%random%"
if exist "%3%4.pdb" move "%3%4.pdb" "%dir%\%4.pdb.locked%random%"
if exist "%3%4.xml.locked" del "%dir%\%4.xml.locked%random%"
REM Code with Macros
REM if exist "$(TargetPath)" move "$(TargetPath)" "C:\temp\LockedAssemblies\$(TargetFileName).locked.%random%"
REM if exist "$(TargetDir)$(TargetName).pdb" move "C:\temp\LockedAssemblies\$(TargetName).pdb" "$(TargetDir)$(TargetName).pdb.locked%random%"
REM if exist "$(TargetDir)$(TargetName).xml.locked" del "C:\temp\LockedAssemblies\$(TargetName).xml.locked%random%"
REM PreBuildEvent code
REM $(SolutionDir)\BuildProcess\PreBuildEvents.bat "$(TargetPath)" "$(TargetFileName)" "$(TargetDir)" "$(TargetName)"
REM References:
REM http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
REM http://stackoverflow.com/a/2738456/27194
REM http://stackoverflow.com/a/35800302/27194
需要从每个VS项目预构建事件中调用脚本。
$(SolutionDir)\BuildProcess\PreBuildEvents.bat "$(TargetPath)" "$(TargetFileName)" "$(TargetDir)" "$(TargetName)"
答案 23 :(得分:1)
就我而言,这是一个权限问题。我必须以管理员身份运行Visual Studio。
答案 24 :(得分:1)
我注意到一些解决了我的问题的答案,但是,万一有人遇到同样的问题。
如果您正在运行一个控制台应用程序:在您执行任何操作之前。
确保已关闭可能已从先前版本打开的任何控制台窗口。例如,我只是在控制台应用程序中测试一些代码,我没有意识到以前我运行程序之一的控制台窗口是打开的。在那次会议期间,我正在调试,窗户被推到后面,我无法看到它。只是说,这可能是你的问题,所以检查以确保这不是问题。
答案 25 :(得分:1)
我正在开发一个微服务项目解决方案,其中我需要同时运行两个项目,当Lunchsettings.json发生冲突 applicationurl:两个正在运行的项目的{portNo}部分是相同的端口
第一个项目的lunchsettings.json
...
"Project#1": {
...
"applicationUrl": "http://localhost:5001",
...
}
lunchsettings.json用于第二个项目
...
"Project#2": {
...
"applicationUrl": "http://localhost:5001",
...
}
要修复
第一个项目的lunchsettings.json
...
"Project#1": {
...
"applicationUrl": "http://localhost:5001",
...
}
lunchsettings.json for secondproject
...
"Project#2": {
...
"applicationUrl": "http://localhost:5002",
...
}
答案 26 :(得分:1)
确保关闭所有实例 wcfSvcHost ,然后重试。 它对我有用!
答案 27 :(得分:1)
有时无法清除DEBUG文件夹。我所做的工作是重命名了无法删除的文件。因此,删除所有无法删除的文件夹和文件,然后重命名为“ _old”。
答案 28 :(得分:1)
对我而言,Avast防病毒软件不会让visual studio写入/读取/执行文件。所以我不得不将Visual Studio 2010/2012文件夹添加到防病毒排除列表中。就在那之后......它有效。
答案 29 :(得分:1)
杀死 vstest.executionengine.exe 进程可以在90%的时间内解决此问题。如果这不起作用,那么还要杀死 QTAgent32.exe ,然后删除相关项目的/ bin和/ obj文件夹。
这是我工作日最烦人的部分。 :)
答案 30 :(得分:1)
我没有意识到我仍然附加了调试器并试图在同一个Visual Studio实例中构建。一旦我停止调试器,我就能够构建。
答案 31 :(得分:1)
在我的情况下,它是Resharper Unit Tests runner(加上NUnit测试,从未遇到过MsTests的问题)。杀死进程后,能够重建进程,无需重启OS或VS2013
答案 32 :(得分:1)
我终于如何修复它。为什么我们不能在第一次调试后继续调试,因为第一个调试exe仍在运行。因此,在第一次调试之后,您需要转到任务管理器 - >处理标签 - > [你的项目名称exe]结束exe进程。
它对我有用:)
答案 33 :(得分:1)
此问题是查找以下错误时的第一个结果:
无法复制文件“...”,因为找不到它。
在Visual Studio 2013(更新3)中构建时。
解决方案:在Visual Studio 2013中卸载“Productivity Power Tools”。
https://connect.microsoft.com/VisualStudio/feedback/details/533411
答案 34 :(得分:0)
我疯狂地试图找到为什么System
进程在我终止后的另一分钟工作的EXE上保持打开状态,并且我得到与OP相同的错误。
原因是以前的开发人员没有在IDisposable
中包装using(){}
个对象。一旦IDisposable
个对象正确地自行销毁,就不会再发生错误,我可以立即重建。
答案 35 :(得分:0)
将此添加到预先构建的:
(if exist "$(TargetDir)*old.exe" del "$(TargetDir)*old.exe") & (if exist "$(TargetDir)*.exe" ren "$(TargetDir)*.exe" *.old.exe)
答案 36 :(得分:0)
我意识到这只是为这个问题增加了已经很多的答案,但我认为值得一提的是,虽然不完美,但是@Stefano,@ MichaelRibbons和@IvanFerrerVilla提供的答案的组合提供了当他们两个都不是非常成功时,取得了相当大的成功。
答案 37 :(得分:0)
如果您使用Visual Studio代码(vsCode)遇到此问题和/或坚持使用终端命令,则 clean 命令将删除生成文件,通常 < / em>解决上述问题:
dotnet clean
然后,您可以返回运行状态:
dotnet build
或
dotnet run
答案 38 :(得分:0)
花了几个小时试图解决这个问题,然后发现我正在开发一项服务 - 记得停止任何服务作为解决方案的一部分!
答案 39 :(得分:0)
在我的情况下,VS coulnd复制的文件是.Task项目的文件,所以问题是我在本地运行了一些计划任务。一旦我停下来并禁用它们,复制问题就消失了。
答案 40 :(得分:0)
您必须在关闭后终止该进程。 我用;
Process.GetCurrentProcess().Kill();
将此代码添加到关闭事件或方法中,用于关闭的内容。
答案 41 :(得分:0)
我已经多次添加了相同的问题,这种治疗方法的任何答案都无法解决,或者如果这样做了,那就是通过使用讨厌的方法解决。
我想的是,总是有充分的理由会发生此问题(并且不是Microsoft的bug!-嗯,VS可以更好地标记它:-)。
主要原因可能只是您的项目依赖关系搞砸了!
作为一个简单的示例():
现在,您可以考虑所有可能触发此类错误的情况:
Error Could not copy "obj\Debug\ProjectX.exe" to "..\bin\Debug\ProjectX.exe". Exceeded retry count of 10. Failed. The file is locked by: "ProjectX (17132)" ProjectX
解决此问题通常是一个繁琐的过程,因为您将必须完全了解系统中的所有依赖项
答案 42 :(得分:0)
大多数答案都告诉你要杀死这个过程,但是对于进程黑客,我找不到。
我找到了一个相对简单的解决方案。
m2 <- glmmPQL(Diract ~ Dir*Rec + offset(LnScan) + Year,
random = ~ 1 | ID,
family = negative.binomial(1),
data = Direct,
correlation = corCompSymm(form=~1|ID))
答案 43 :(得分:0)
@杰拉德的答案是正确的。
当clean + build无法为我解决此问题时,请执行以下操作,以取得成功:
Closing Visual Studio
Deleting the bin and obj folders, and
Reopening Visual Studio.
但是我需要在控制台中做一些额外的工作:
> Add-Migration Initial
> Update-Database
然后我开始调试,它开始工作。
答案 44 :(得分:0)
我通过以管理员身份运行Visual Studio来解决了这个问题。
答案 45 :(得分:0)
您可以通过脚本杀死应用程序。
如果您的应用程序名为myapp.exe
,请在终端中运行下一个脚本:
taskkill /IM myapp.exe /F
参数为:
/IM application name (imagename)
/F Specifies to forcefully terminate the process(es).
答案 46 :(得分:0)
我遇到了同样的问题,我在这里尝试了很多不同的方法但是没有一个能为我工作,这是唯一对我有用的解决方案:
从我的解决方案的DEBUG文件夹中删除READ ONLY属性,
将此添加到构建事件:如果存在“$(TargetPath).locked”del“$(TargetPath).locked” 如果不存在“$(TargetPath).locked”如果存在“$(TargetPath)”移动“$(TargetPath)”“$(TargetPath).locked”
答案 47 :(得分:0)
如果我使用VS2012在WP8上编辑Xaml页面,我每次部署都会得到这个。
我需要不打开Xaml页面或使用进程资源管理器来终止进程XDesProc.exe。
如果您收到此错误,我建议您使用进程资源管理器查看正在发生的情况(即使这是一个不同的问题)。只需找到进程“WeinGartner.WeinCad.exe”,它应该显示进程并处理访问该文件(至少在杀死vhost文件时没有解决问题)。
答案 48 :(得分:0)
检查任务管理器是否有运行.exe
的进程答案 49 :(得分:0)
另一个kludge,呃,但它很容易在VS 2013中为我工作。点击该项目。在属性面板中,应该是名为Project File的条目,其值为
(您的项目名称).vbproj
更改项目名称 - 例如在末尾添加-01。锁定的原始.zip文件仍然存在,但不再引用...因此您的工作可以继续。下次重新启动计算机时,该锁定会消失,您可以删除错误文件。
答案 50 :(得分:0)
删除Bin文件夹内Debug或Release文件夹下的所有.cache文件。
答案 51 :(得分:0)
我在VS 2015中遇到了这个问题。我的环境的原因是使用StyleCop项目设置StyleCopAdditionalAddinPaths Include =&#34; ...&#34;指定其他StyleCop Addin路径。我使用的解决方法是从.csproj文件中删除此项目设置,而是手动复制StyleCop AddIn,其中存在StyleCop.CSharp.Rules.dll。不是一个优雅的解决方案,但我发现解决方案在执行此操作后从未锁定dll。
答案 52 :(得分:0)
我也碰到了这个。事实证明,我一直在测试我自己构建的服务,并且在我的解决方案中,其中一个项目的.. \ bin \ release目录耗尽了。我已经运行了服务,但在返回测试之前我忘了停止/卸载它。结果,它保留了我引用的一个dll,并且需要从一个项目的bin / release子文件夹移动到另一个dll / release子文件夹。停止服务解决了这个问题。
答案 53 :(得分:0)
就我而言(Windows 10,Visual Studio 2015):
任务管理器 - &gt;用户 - &gt; EndTask =&GT; vshost.exe
(它立即重启,你可以再次建造)
答案 54 :(得分:0)
最快的方法是更改Build配置类型并再次返回上一个配置。
答案 55 :(得分:0)
答案 56 :(得分:0)
重置IIS,停止使用您的DLL(可能是控制台应用程序或Windows服务托管应用程序或IIS)的服务,然后尝试。
它对我有用。
答案 57 :(得分:0)
我在尝试构建主要WinForms(XAF)项目时遇到了错误消息。我只能执行一次应用程序,然后关闭VS2015 IDE并重新启动才能执行重建。在对项目的属性页进行一些挖掘之后 - 在&#34; debug&#34;属性页,选中了一个复选框 - 启用Visual Studio Hosting Process。我取消选中并重新启动了IDE,该应用程序现在正在构建而没有 - &#34;无法复制{project} .exe&#34;消息。
答案 58 :(得分:0)
我也经常在Visual Studio 2010中遇到此问题。关闭Visual Studio,删除bin
和obj
目录,然后重新启动将修复一个版本。然后问题又回来了。我在这个帖子上尝试了其他所有答案,但没有一个对我有用。对我来说永久解决这个问题的唯一方法是转到项目设置并关闭&#34;启用Visual Studio托管过程&#34;,构建,重新打开,然后重新构建。
答案 59 :(得分:0)
就我而言,Visual Studio 2105远程调试器就是问题所在。当我在任务管理器中杀死此任务时,我能够在Visual Studio中成功重建我的应用程序。
答案 60 :(得分:0)
使用DNN。我通过编辑MSBuild.Community.Tasks.Targets文件并更改bin路径来解决了这个问题:
for (int i = 0; i < g; i++)
{
dice = new PairOfDice();
System.out.println(dice.getDie1() + " " + dice.getDie2());
}
答案 61 :(得分:-1)
转到工具&gt;&gt;选项&gt;&gt;数据库工具&gt;&gt;常规 检查Sqript / Query Execution
答案 62 :(得分:-3)
使用
Debug.Flush();
Debug.Close();
万一发生异常,在catch或finally块中。
修改强> 我亲自面对这个问题,我经常做一个技巧,它工作正常。 我从&#39; debug&#39;更改了构建类型。发布&#39; (并且&#39;发布&#39;调试&#39;如果已经有的话)。