我在 MS Visual Stdio 中不断收到以下错误:
Unable to copy file "obj\Debug[Program].exe" to "bin\Debug[Program].exe". The process cannot access the file 'bin\Debug[Program].exe' because it is being used by another process.
这在我关闭和/或停止调试器后随机发生。该程序已关闭,但 VS 为该程序保留了几个打开的句柄。
我发现能够重新调试的唯一方法是关闭 Visual Studio,然后重新打开它,这非常烦人。
知道为什么会发生这种情况,以及如何在不先关闭调试器的情况下再次运行它?
这发生在 2013 Ultimate 和 2015 Ultimate 中。
谢谢。
最佳答案
我将提出一个新的解决方案,永久修复它。我一直这样做,当遇到“调试器”问题时,这些问题主要发生在使用旧解决方案迁移到新 Visual Studio 时,因此您的情况可能会有所不同。
如果切换回 AnyCPU 配置允许您再次调试,那么我相信以下步骤将解决它。
进入“Configuration Manager”,将“Active solution platform:”更改为 Any CPU,再次单击向下箭头,然后选择“Edit...”,删除此处的任何自定义条目,即使它只是x86 和 x64。
在同一个窗口中,在您的项目下输入平台并重复步骤 1。删除除 AnyCPU 之外的所有条目。
关闭配置管理器。
转到“构建”菜单并单击“清理解决方案”。
以管理员身份重新启动 Visual Studio 2015 CTP 5。打开您的解决方案。对一个构建、发布或调试使用“任何 CPU”,然后关闭它。只需验证您基本上仍能使用“任何 CPU”目标。
最小化 Visual Studio,进入您的解决方案并清除所有 Bins/Release 和 Debugs,包括任何 x86/x64 Release/Debug 文件夹(如果它们仍然存在)。
最大化 Visual Studio,进入配置管理器,重建您的平台目标 (x86/x64),从经过验证的工作环境复制设置:“任何 CPU”。
重新开始愉快地工作!
该错误是由解决方案/项目中保存的不正确、过时或损坏的“目标平台”设置引起的。您可以重复上述步骤,再次删除 Project Solutions 下的“Any CPU”设置,因为它也可能在其中缓存了错误的 juju。使用术语“任何 CPU”设置复制设置“空设置”再次添加它也可以解决此问题。然后您想要删除所有其他内容,并使用新的 Any CPU 设置将其重新添加为 x86/x64。
决定在我的 blog/site 上制作带有插图的操作方法.
现在,如果您只有“任何 CPU”作为配置问题,则可能由三件事引起。需要刷新的“任何 CPU”设置,打开的流可以等于打开的句柄,或者可能是 StackOverflow 异常,只是还没有溢出。
如果“任何 CPU”出现这种情况并且您没有其他目标解决方案,您可能首先想试试这个。添加一个新的平台目标,x86/x64,可以从任何 CPU 复制设置。这将允许您从配置管理器和解决方案中删除任何 CPU。然后,您可以添加一个名为 Any CPU 的新解决方案,并将“空设置”作为设置选项。然后删除 x86/x64。这会强制刷新项目中的 Any CPU 配置。尝试构建一两个。
如果它仍然发生,如果它发生在“任何 CPU”上,您很可能需要重新访问您的代码。这可能是一个糟糕的流/未关闭流问题,一个卡在系统中的糟糕的 COM 调用等。每当我尝试使用非托管代码或系统进程时,我都会尝试处理应用程序挂起和 StackOverflows。这可能会如前所述发生。
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.ThreadException +=
new ThreadExceptionEventHandler(Application_ThreadException);
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
Exception ex = (Exception)e.ExceptionObject;
MessageBox.Show("Congratulations, you have broken this program like no other user before you!\n\n" +
"Exception : " + ex.Message + "\n\n" + "Stack : " + ex.StackTrace,
"Ridonculous Exception Occurred", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
finally
{
Application.Exit();
}
}
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
try
{
MessageBox.Show("This is a StackOverflow Exception!\n\n" +
"Exception : " + e.Exception.Message + "\n\n" + "Stack : " + e.Exception.StackTrace,
"Ridonculous StackOverflow Exception Occurred", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
finally
{
Application.Exit();
}
}
来源:http://tech.pro/tutorial/668/csharp-tutorial-dealing-with-unhandled-exceptions
或者:如果您安装了多个 Visual Studio,甚至安装了预览版 Vstudios,您可能会通过来回切换或运行更新在不知不觉中破坏 JIT。最新版本的 Visual Studio 实际上会通知您 JIT 错误(无论是否存在)并建议您修复 IDE。
任何其他的,都超出了我的知识水平。祝你好运!
关于c# - Visual Studio 在停止调试器后保持句柄打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28190732/