在Visual Studio中无法将“*\bin\debug\*.dll”文件复制到“bin\*.dll”

3
我遇到了这个问题:
无法将文件“*\bin\debug\*.dll”复制到“bin\*.dll”,当出现这种情况时,由于上述错误,编译将失败。
编辑:我知道文件被devenv.exe进程锁定,导致上述错误,因为如果我重新启动VS,问题就会消失,但有没有办法在不重启VS的情况下解决这个问题呢?

如果您使用进程资源管理器或类似工具,它是否实际上会列出devenv打开输出文件的句柄? - stijn
以下的答案详细介绍了如何在不关闭VS的情况下完成这个操作…很棒的答案,只是不确定为什么你要做那么多工作。为什么不直接关闭/重新启动VS呢? - Sam Post
@Sam:这是因为从长远来看,删除锁定的资源比重新启动VS更有效率。 - Graviton
一个简单的解决方法是将文件移动一下。Visual Studio会重新构建,然后你可以在关闭VS时删除移动过的文件。 - Telavian
这个问题的答案帮助了我。 https://dev59.com/O2Yr5IYBdhLWcg3wdqCv - Kirill Chilingarashvili
显示剩余2条评论
4个回答

6

我之前也遇到过这个问题,像 Sam 建议的那样重启 VS 似乎可行,但并不是你寻找的解决方案。

然而,MSDN 论坛上有一个帖子名为 "无法从 obj\debug 复制到 bin\debug",提供了一些建议:

选项 1

在项目属性中创建一个预构建操作(右键单击解决方案资源管理器中的项目,选择“属性”选项,选择“生成事件”选项卡)。添加以下代码:

if exist "$(TargetPath).locked" del "$(TargetPath).locked" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"

这将文件复制到不同的名称,并使构建成功进行。

后续跟进:

但是还需要做出一点小改进,让此方法也可以在从头开始运行构建时使用,例如清理后:

if exist "$(TargetPath).locked" del "$(TargetPath).locked" if not exist "$(TargetPath).locked" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked"

选项 2

我曾经遇到类似的问题,我通过在 [Source Repository of Choice] 中排除 bin 和 obj 文件夹来解决它。

希望对你有所帮助。


2

FWIW,这个错误已经存在多年了,微软仍然没有修复它。只需搜索“MSB3021”即可查看所有相关帖子。


1

我以前也遇到过这个问题,如果我没记错的话,我只是关闭了Visual Studio然后重新启动它。如果你知道锁定文件的进程,你需要找到一种方法来a)释放该进程的锁定,b)终止该进程。


0
我曾遇到过这个问题,于是我进入 VBprojects 文件夹下的 debug 文件夹并删除了其中的文件,随后重新构建应用程序,问题得以解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接