Visual Studio无法写入输出文件’… \ _ \ netj \ Debug \ Foo.Bar.dll“

我在Visual Studio 2010中编译一个大的c#解决方案时遇到了这个错误。每次编译后我都要删除此解决方案使用的项目之一的obj文件夹。 否则我收到以下错误:

Could not write to output file '...\obj\Debug\Foo.Bar.dll' The process cannot access the file because it is being used by another process 

我一直在寻找互联网上的解决方案,实际上发现/尝试了一些解决方案。

例如:很多开发论坛的人都建议在UserControl (在其他一些来源中)设计器打开时不要开始编译。

其他一些人使用预构建脚本来删除obj文件夹,这个特殊的解决方案是可以接受的,但如果发布的项目是一个广泛使用的库,它的重新编译将导致重新编译“父”项目。

最后我发现了这个VS2010 (SP1也是)“bug”的解决方案,我想与stackoverflow用户分享。

在我的情况下,问题是csproj文件是SELF-REFERENCING锁定的'...\obj\Debug\Foo.Bar.dll'文件。 疯了我知道。 所以我通过从.csproj文件中删除以下行来解决这个恼人的问题:

  obj\Debug\Foo.Bar.dll  

我最初找到了另一个问题的解决方案,因为VS似乎将程序集锁定在obj \ debug文件夹中。 我在项目中添加了一个预构建脚本来解决我的问题。

 del "$(ProjectDir)obj\*.*" /S /F /Q 

在看到Salaros给出的答案后,确实是问题所在。 我创建了一个新的usercontrol,它使用来自另一个项目的Server控件。 出于某种原因,当您在设计模式下查看usercontrol时,VS有时会自行创建自引用。 即使删除自引用也会修复它,直到VS认为是时候再次添加引用。 没有找到该部分的确切模式。

PS:我正在使用vs2012

我遇到这个问题时:

打开visual studio运行调试转到c:并使用系统清理

再试一次,……

你会发现这个错误

解决方案:关闭visual studio make system cleanup重启计算机打开visual studio作为管理员选择项目清理重建

它会工作

在我的情况下,不知何故exe文件在发布时丢失了。 不确定这是怎么发生的。 我用调试的副本替换它,一切都很好。 我应该早点检查一下,但从未想过文件会丢失。