问题 vshost.exe一直在访问我的.dll,我在构建它时无法更新它


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

问题是,从一个空的Output文件夹,我第一次构建项目时,没关系。第二次,我收到以下错误:

错误328无法将文件“obj \ Release \ MyLibrary.dll”复制到   “...... \输出\发布\ MyLibrary.dll”。该过程无法访问   文件'...... \ Output \ Release \ MyLibrary.dll'因为正在使用它   通过另一个过程。

“另一个进程”是来自Visual Studio的vshost.exe。由于它不断访问MyLibrary.dll,因此无法删除或替换,从而导致错误。这样可以保持Output文件夹上的MyLibrary.dll不会更新。但是我在我的解决方案中有其他.dll项目,但这并没有发生。

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

我对vshost.exe的作用知之甚少,所以我不知道从哪里开始从root中清除这个问题。我不知道为什么这会发生在特定的.dll上。我很感激任何有助于我调查这种情况的想法。


5237
2017-10-29 15:33


起源

它发生在Visual Studio 2005之后。不时出现,没有特别的原因。我发现的唯一方法就是和你一样。 - SimonGoldstone
分离调试器后,某些东西可能会继续。即某个线程上的某些正在进行的代码 - Grant Thomas
当我在一个visual studio会话中编译了一个库时,我遇到了这个问题,而另一个Visual Studio会话调试中的应用程序。找到库代码中的错误并重新编译后,重建后无法刷新库的应用程序副本。 - Gerard ONeill


答案:


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

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

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

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


14
2017-10-29 15:48



它通过在使用dll的可执行文件的项目中取消标记“启用Visual Studio宿主过程”来解决问题。谢谢你的回答。 - André Santaló