DLL已锁定 - Visual Studio 2010 C ++

时间:2015-08-17 02:48:31

标签: c++ windows git visual-studio-2010 dll

我目前正在登录计算机,我当前的问题涉及自定义构建步骤,该步骤无法将.dll复制到Bin目录,因为Windows说它无法访问该文件,因为它当前正由另一个进程使用。

我可以在其他几个项目中重现这一点。事件的顺序是我成功构建了一个版本,做了一些测试,在执行git bisect时检查了另一个SHA,并尝试从那个SHA 构建一个版本,而没有执行git clean -xfd(故意,因为我试图尽可能多地缓存可重用的数据)。奇怪的是,我尝试使用Process Explorer(procexp)和tasklist /m <locked_dll.dll>来搜索持有此dll的内容,并且无法找到任何保留在dll上的内容。我在非管理员帐户上,我不确定这是否会导致Windows隐藏某些进程。重新启动机器会有所帮助,但这不是一个可接受的解决方案,因为我正在尝试自动化。我能够删除.dll,当我尝试在VS中构建项目时,它会抱怨它在尝试将其复制到Bin文件夹时仍然无法访问dll。有任何想法吗?我将继续研究这个问题,但截至目前,我有点难过。

修改 这似乎是一个重复的问题(Error: Cannot access file bin/Debug/... because it is being used by another process),但我会留下这个问题,看看是否有人发现了与该主题相关的新内容。

2 个答案:

答案 0 :(得分:1)

我在VS 2010中看到了这个问题,其中包含一个包含多个项目的大型.Net解决方案。到目前为止,我所见过的每个案例都有一个项目,其中包含另一个项目也使用的依赖DLL,而另一个项目也使用第一个项目作为参考,并且还使用相同的依赖DLL,这些DLL恰好是不同的第一个项目的版本。

用不同的方式描述它:

项目A取决于DLL A的v1

项目B依赖于DLL A的项目A和v2

项目A和B都在同一个解决方案中

解决方案是使用相同版本的DLL A.我在升级到新版本的SQLite时经常遇到这种情况,我忘记更新所有项目中的依赖项。

答案 1 :(得分:0)

与几位同事交谈后,我找到了解决问题的方法。 procexp和tasklist没有看到哪个进程锁定了dll,因为没有进程锁定 那个 特定机器上的dll。

我有一个硬件配置,其中机器A(主机PC)使用网络交换机连接到机器B(充当从机器A检索指令的客户端)。机器B运行链接到相同dll的相同二进制文件。因此,显然,在机器A上运行procexp或tasklist不会看到任何锁定dll的东西,因为机器B是罪魁祸首。