Visual Studio在构建时锁定输出文件

Nev*_*ind 79 visual-studio

我在VS 2010中有一个简单的WinForms解决方案.每当我构建它时,输出文件(bin\debug\app.exe)最终被锁定,后续构建失败,并显示一条消息 "The process cannot access the file 'bin\Debug\app.exe' because it is being used by another process." .构建项目的唯一方法是重新启动VS之后每一个构建,都非常尴尬.

我发现这篇旧博客帖子http://blogs.geekdojo.net/brian/archive/2006/02/17/VS2005FileLocking.aspx - 似乎这个问题真的很老了.有谁知道这里发生了什么,或者至少有一些解决方法?

更新

我实际上并没有运行该文件.锁定发生在构建之后,而不是在调试之后(即启动VS - 构建 - 构建 - 失败!)并且我尝试关闭防病毒软件.它没有帮助.

更新2

Process Explorer显示已加载文件的devenv.exe(在DLL中,而不在Handles中).看起来构建期间的一些故障阻止了卸载,但是(第一个)构建完成时没有任何消息,然后"1成功,o失败"/

Sto*_*net 69

有同样的问题,但找到了解决方案(感谢 Keyvan Nayyeri):

但是如何解决这个问题?根据您的项目类型有多种方式,但我向Visual Studio加载项开发人员推荐的一个简单解决方案是向项目的构建事件添加一个简单的代码.

您可以将以下代码行添加到项目的预构建事件命令行.

if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
Run Code Online (Sandbox Code Playgroud)

  • 我也需要重命名PDB,因为它也被锁定:`if exist'$(TargetDir)$(TargetName).pdb.locked"del"$(TargetDir)$(TargetName).pdb.locked"`,`if存在"$(TargetDir)$(TargetName).pdb"如果不存在"$(TargetDir)$(TargetName).pdb.locked"move"$(TargetDir)$(TargetName).pdb""$(TargetDir)$(的TargetName).pdb.locked"` (5认同)
  • 您的答案中的链接不再有效. (3认同)
  • 实际上这是最好的,应该是答案! (2认同)

Vla*_*yuk 24

这不是病毒问题.这是visual studio 2010的bug.这个问题似乎与使用visual studio gui设计师有关.

此处的解决方法是将锁定的输出文件移动到预构建事件中的另一个临时输出文件中.随机生成临时文件名是有意义的.

del "$(TargetPath).locked.*" /q 
if exist "$(TargetPath)"  move "$(TargetPath)" "$(TargetPath).locked.%random%"
exit /B 0
Run Code Online (Sandbox Code Playgroud)

如果使用常量临时文件名,您只需推迟锁定:

该解决方法只运行一次

 if exist "$(TargetPath).locked" del "$(TargetPath).locked"
    if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
Run Code Online (Sandbox Code Playgroud)

我还找到了一个包含2个临时文件的解决方案,可以正常工作2次.

  • 好吧,似乎只有在最后一次运行时调用System.Reflection.Assembly.GetExecutingAssembly,或者那是新闻 - 如果有任何设计时组件的源代码(组件工具栏中活动的任何设计时组件的源代码)在上次运行开始时,在编辑器中打开了在设计时调用System.Reflection.Assembly.GetExecutingAssembly.得到它了? (2认同)

小智 6

问题也发生在我身上.

我的情况是这样的:运行Windows 7(但也可能发生在Windows XP中)并且在使用WPF用户控件进行项目时我可以构建所有时间,直到打开用户控件的XAML文件 - 从那里,我'有一个版本,然后文件被锁定.

此外,我注意到我以管理员身份运行Visual Studio(Devenv.exe),我已经开始运行没有管理员权限的Visual Studio,问题就消失了!.

如果它对你有帮助,请告诉我.祝好运.


Nev*_*ind -8

我创建了一个新的空白解决方案并将所有旧文件添加到其中。这在某种程度上解决了问题。