11

我通过项目属性为我的 .dll 项目设置了一个输出文件夹,我称之为“输出”。

问题是,从一个空的输出文件夹中,我第一次构建项目时,它很好。第二次,我收到以下错误:

错误 328 无法将文件“obj\Release\MyLibrary.dll”复制到“......\Output\Release\MyLibrary.dll”。该进程无法访问文件“......\Output\Release\MyLibrary.dll”,因为它正被另一个进程使用。

“另一个进程”是 Visual Studio 中的 vshost.exe。由于它一直在访问 MyLibrary.dll,因此无法删除或替换它,因此为什么会出现错误。这会使输出文件夹上的 MyLibrary.dll 保持不更新。但是,我的解决方案中有其他 .dll 项目不会发生这种情况。

到目前为止我用来更新它的解决方案是关闭 VS(从而关闭 vshost.exe),然后运行一个删除文件 Output\Release\MyLibrary.dll 的 .bat 文件,然后再次打开 VS 并重建它的项目.

我对 vshost.exe 究竟做了什么知之甚少,所以我不知道从哪里开始从根本上解决这个问题。我不知道为什么这会发生在特定的 .dll 上。我感谢任何有助于我调查为什么会发生这种情况的想法。

4

1 回答 1

15

vshost.exe 是 Visual Studio 托管进程。它是一个自定义 CLR 主机,可以加载您的 EXE 并使调试更容易。你可以关掉它,副作用很少。项目 + 属性,调试选项卡,取消选中“启用 Visual Studio 托管进程”选项。

你现在更有可能在你的程序中找到真正的问题。最常见的问题是您的程序在您要求时不会退出。您仍然会收到构建错误,您现在会看到您自己的 EXE 被指为锁定 DLL 的那个。您还将在任务管理器的“进程”选项卡中看到它。这也可以让你杀死它。

我不清楚程序员是如何重现这个问题的。按 Ctrl+F5 而不是 F5 肯定会执行此操作,始终按 F5 以在启动程序时立即附加调试器。使用 Debugger + Stop Debugging 现在可以可靠地停止程序。否则,您可以使用 Tools + Attach to Process 稍后再次附加调试器,以了解您的程序在做什么。

反恶意软件是一个值得一提的常见祸害,当他们看到不知从何处出现的可执行文件时,他们会非常兴奋如果你使用 Avast 然后完全卸载它,它与 VS 完全不兼容。

于 2013-10-29T15:48:35.127 回答