在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
(有时)有用,但这让我很紧张。有办法阻止这一切发生吗?
调试器设置为
我在Windows 8上的VS 2012 Version 11.0.60610.01 Update 3上遇到了同样的问题
没有打开设计器窗口,项目是一个简单的控制台应用程序。
删除访问该文件的vshost进程在大多数情况下都不起作用,因为该进程没有访问该文件。
最简单的工作方法是将项目从解决方案中删除,在解决方案中构建另一个项目,然后将原始项目添加回来。
这是一种刺激和浪费时间,但这是我所知道的所有其他选择中最便宜的。
希望这对你有所帮助……
我在Visual Studio 2013中遇到过类似的错误消息。
大多数情况下,我发现这种情况发生在调试进程因为异常而停止时。
当clean+build不能为我解决这个问题时,我通过以下方法取得了成功:
关闭Visual Studio
删除bin和obj文件夹
重新开放Visual Studio。
此“bug”自Visual Studio 2003以来一直存在。
最后,我还发现我通常可以通过简单地重命名可执行文件然后删除它来克服这个问题。
在Visual Studio Premium 2013 (Update 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的。MyProject.old.pdb
然后,构建/调试会话2启动,并且MyProject。pdb和MyProject.old.pdb仍然锁定:
MyProject.old.pdb—> MyProject.old.old.pdb
MyProject的。MyProject.old.pdb
最后,重新启动Visual Studio并进行一个新的构建将摆脱这两个问题,并像往常一样继续这个过程。
这是因为你已经关闭了你的应用程序,但它仍然在后台运行。
临时解决方案:
进入任务管理器(Ctrl + Shift + Esc)。
进入进程选项卡,找到“YourProjectName.exe”。
如果找不到自己的进程,请勾选“显示来自所有用户的进程”。
结束处理
永久解决方案:必须通过编码关闭应用程序。这是代码…
System.Windows.Forms.Application.Exit();
您必须以所有形式将此代码放入表单的关闭事件中。例子:
private void frm_menu_FormClosing(object sender, FormClosingEventArgs e)
{
System.Windows.Forms.Application.Exit();
}
在我的情况下,它是Resharper单元测试运行器(加上NUnit测试,从来没有这样的问题与MsTests)。在杀死进程后,可以重建进程,而无需重新启动OS或VS2013。
其他测试运行程序,比如xUnit,也会导致同样的问题。
有帮助的方法是检查是否可以添加Dispose模式,例如,如果您正在添加DbFixture,而数据库联系人没有正确地处理。这将导致即使测试完成,程序集文件也被锁定。
请注意,您可以将IDisposable接口添加到DbFixture中,并让IntelliSense添加Dispose模式。然后,处理相关的包含属性,并显式地将它们赋值为null。
这将有助于以一种干净的方式结束测试,并在测试结束后立即解锁相关的锁定文件。
示例(DBFixture由xUnit测试使用):
public class DbFixture: IDisposable
{
private bool disposedValue;
public ServiceProvider ServiceProvider { get; private set; }
public DbFixture()
{
// initializes ServiceProvider
}
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
// dispose managed state (managed objects)
ServiceProvider.Dispose();
ServiceProvider = null;
}
// TODO: free unmanaged resources (unmanaged objects) and override finalizer
// TODO: set large fields to null
disposedValue = true;
}
}
// // TODO: override finalizer only if 'Dispose(bool disposing)' has code to free unmanaged resources
// ~DbFixture()
// {
// // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
// Dispose(disposing: false);
// }
public void Dispose()
{
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
Dispose(disposing: true);
GC.SuppressFinalize(this);
}
}
测试类本身也需要相同的模式——它需要自己的Dispose方法(如上面的DbFixture类所示):
public SQL_Tests(ITestOutputHelper output)
{
this.Output = output;
var fixture = new DbFixture(); // NOTE: MS Dependency injection framework didn't initialize when the fixture was a constructor param, hence it is here
_serviceProvider = fixture.ServiceProvider;
} // method
因此,它需要在自己的dispose方法中处置其本地属性_serviceProvider,因为测试类构造函数SQL_Tests实例化了它。
关闭进程w3wp.exe (IIS)通常可以解决这个问题。通常,您可以通过导航到bin文件夹并尝试删除它来了解对该文件具有锁的进程。如果另一个进程正在使用它,将弹出的错误消息将包含需要被杀死的进程的名称。
使用Blazor和Fluent UI Web组件,我在发布时得到了以下错误:
https://learn.microsoft.com/en-us/fluent-ui/web-components/integrations/blazor
C:\Program
Files\dotnet\sdk\6.0.402\Sdks\Microsoft.NET.Sdk.Razor\targets\Microsoft.NET.Sdk.Razor.StaticWebAssets.targets(615,5):
Warning MSB3026: Could not copy
"C:\Users\oscar.nuget\packages\microsoft.fast.components.fluentui\1.5.3\staticwebassets\icons\TextDirectionRotate270Right\en\text_direction_rotate_270_right_24_regular.svg"
to
"C:\Users\oscar\source\repos\MyVeryLongProjectName12345678\MyVeryLongProjectName12345678\Server\obj\Release\net6.0\PubTmp\Out\wwwroot_content\Microsoft.Fast.Components.FluentUI\icons\TextDirectionRotate270Right\en\text_direction_rotate_270_right_24_regular.svg".
Beginning retry 10 in 1000ms. Could not find a part of the path
'C:\Users\oscar\source\repos\MyVeryLongProjectName12345678\MyVeryLongProjectName12345678\Server\obj\Release\net6.0\PubTmp\Out\wwwroot_content\Microsoft.Fast.Components.FluentUI\icons\TextDirectionRotate270Right\en\text_direction_rotate_270_right_24_regular.svg'.
C:\Program
Files\dotnet\sdk\6.0.402\Sdks\Microsoft.NET.Sdk.Razor\targets\Microsoft.NET.Sdk.Razor.StaticWebAssets.targets(615,5):
Warning MSB3026: Could not copy
"C:\Users\oscar.nuget\packages\microsoft.fast.components.fluentui\1.5.3\staticwebassets\icons\TextDirectionRotate270Right\en\text_direction_rotate_270_right_20_regular.svg"
to
"C:\Users\oscar\source\repos\MyVeryLongProjectName12345678\MyVeryLongProjectName12345678\Server\obj\Release\net6.0\PubTmp\Out\wwwroot_content\Microsoft.Fast.Components.FluentUI\icons\TextDirectionRotate270Right\en\text_direction_rotate_270_right_20_regular.svg".
Beginning retry 10 in 1000ms. Could not find a part of the path
'C:\Users\oscar\source\repos\MyVeryLongProjectName12345678\MyVeryLongProjectName12345678\Server\obj\Release\net6.0\PubTmp\Out\wwwroot_content\Microsoft.Fast.Components.FluentUI\icons\TextDirectionRotate270Right\en\text_direction_rotate_270_right_20_regular.svg'.
C:\Program
Files\dotnet\sdk\6.0.402\Sdks\Microsoft.NET.Sdk.Razor\targets\Microsoft.NET.Sdk.Razor.StaticWebAssets.targets(615,5):
Error MSB3027: Could not copy
"C:\Users\oscar.nuget\packages\microsoft.fast.components.fluentui\1.5.3\staticwebassets\icons\TextDirectionHorizontalRight\ko\text_direction_horizontal_right_24_regular.svg"
to
"C:\Users\oscar\source\repos\MyVeryLongProjectName12345678\MyVeryLongProjectName12345678\Server\obj\Release\net6.0\PubTmp\Out\wwwroot_content\Microsoft.Fast.Components.FluentUI\icons\TextDirectionHorizontalRight\ko\text_direction_horizontal_right_24_regular.svg".
Exceeded retry count of 10. Failed.
看着
C:\Users\oscar\source\repos\MyVeryLongProjectName12345678\MyVeryLongProjectName12345678\Server\obj\Release\net6.0\PubTmp\Out\wwwroot\_content\Microsoft.Fast.Components.FluentUI\icons\TextDirectionHorizontalRight\ko\text_direction_horizontal_right_24_regular.svg
长度为261个字符。
然后我尝试启用长路径并重新启动我的计算机。
https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry
这没有工作,我得到了同样的错误。然后,我将项目移动到C:\MyVeryLongProjectName12345678\,而不是C:\ users \奥斯卡\source\ rep\ MyVeryLongProjectName12345678\。这样做之后,一切都解决了。
异常
在某些情况下,在Visual Studio当你(Build || Rebuild)在上面
运行IISExpress时,你会遇到这个异常:
无法复制文件"obj\Debug\YourProjectName.dll"到bin\YourProjectName.dll"。进程无法访问该文件
'bin\YourProjectName.dll',因为它正在被其他人使用
过程
解决方案
右键单击需要构建的web项目。
单击属性。
在左侧选择Build Events选项卡。
在Pre-build events命令行中粘贴这两行:
tasklist /fi “imagename eq iisexpress.exe” |find “:” > NUL
如果错误级别 1 任务杀死 /f /im “iisexpress.exe”
你很好!
我找到了一个完整的解决方案!
大多数答案告诉你杀死进程,然而与进程黑客,我找不到任何。
我找到了一个相对简单的解决方案。
在窗体设计器中选择您的主窗体。
单击属性菜单上的事件选项卡。
双击事件FormClosing。这将自动生成事件系统和函数:
private void[你的表单名]_FormClosing(对象发送器,FormClosingEventArgs e)
在这个函数中,添加Application。退出
像这样:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Application.Exit();
}
有用的图像
我希望这能有所帮助!这道题真糟糕!
修复2
打开一项名为“应用体验”的服务。
我正在研究一个微服务项目解决方案,我需要同时运行两个项目,冲突发生在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",
...
}
我已经添加了不同次相同的问题,从这个治疗没有一个答案可以帮助,或者如果他们这样做了,使用一个讨厌的工作。
我认为这个问题总是有一个很好的原因发生(不是微软的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
修复这个问题通常是一个乏味的过程,因为您必须完全理解系统中的所有依赖项
使用Ms进程资源管理器查看是否需要在Windows 7中打开“应用程序体验”
在我的情况下,所有其他建议都不起作用(Windows 7, VS2019)
编译后,生成的. exe文件被重新锁定约一分钟。另一个奇怪的观察:当删除。exe文件时,它像往常一样消失在文件资源管理器中,但在刷新时(F5)重新出现。
您可以使用MS进程资源管理器来查找是否有任何进程持有生成的. exe文件的句柄。为此,查看进程资源管理器的“下窗格”,选择查看句柄而不是dll,并使用“查找”来搜索您的. exe文件。
这告诉我,这是Windows 7的“系统”进程,得到了一个句柄。exe。
一些研究显示,我必须打开Windows的“应用程序体验”服务(“自动启动”)才能永久摆脱这种奇怪的行为。
以下是更多信息:
在什么情况下,系统进程(PID 4)保留一个打开的文件句柄?
第一个消息错误解决方案:
在我的例子中,问题在于路径长度。
解决方案是减少/更改问题文件路径。如果问题出在项目中的文件上,你应该减少/更改存储库路径。
C:\Users\userTest\folder1\folder2\folder3\...\folderX\myProject\...\file.exe
如。
C:\Users\userTest\folder1\myProject\...\file.exe
换句话说,默认情况下路径长度不能超过260个字符。
原线程答案
(https://stackoverflow.com/a/73686473/12678101)