Visual Studio无法写入输出文件'...\obj\Debug\Foo.Bar.dll'。

15

在使用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(某些其他来源中的From)设计器时开始编译。

还有一些人使用预构建脚本来删除 obj 文件夹,这种解决方案是可行的,但如果该项目是一个广泛使用的库,则重新编译会导致“父”项目的重新编译。

4个回答

38

最终,我找到了解决这个 VS2010(包括SP1)“bug”的方法,并想与stackoverflow用户分享。

在我的情况下,问题在于csproj文件自引用锁定的'...\obj\Debug\Foo.Bar.dll'文件。很疯狂,我知道。 所以我通过从.csproj文件中删除以下行来解决这个令人烦恼的问题:

<Reference Include="Foo.Bar">
  <HintPath>obj\Debug\Foo.Bar.dll</HintPath>
</Reference>

我在考虑为这个问题提交一个错误报告,但由于VS12已经发布,微软的人可能会将其标记为“不修复”:D 哦,你们检查过VS12是否以相同的方式(误)运行了吗? - Salaros
3
刚刚在使用VS2012时遇到了同样的问题,通过完全重新构建解决了它。这明显与使用自定义用户控件有关,但不确定具体是哪个方面引起的。 - Tom Makin
2
我同意@shakinfree的观点,我将一个用户控件拖放到我的窗体上,这导致VS向项目添加了自引用。愚蠢的错误。 - CJBrew

2

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

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

在看到Salaros给出的答案后,我确实发现了问题。我创建了一个使用另一个项目中的服务器控件的新用户控件。由于某种原因,在设计模式下查看用户控件时,VS有时会创建对自身的自引用。即使删除了自引用,直到VS认为是添加引用的时间,才能修复它。还没有找到这部分的确切模式。

PS:我正在使用vs2012


请阅读我的原始问题: “[谈论您的解决方案]...这个特定的解决方案是可以接受的,但如果发行的项目是一个广泛使用的库,它的重新编译将导致“父”项目的重新编译。” 这会严重拖慢调试速度。 - Salaros

0

这个问题发生在我:

  1. 打开Visual Studio
  2. 运行调试
  3. 转到C:并使用系统清理

如果您尝试再次构建,您将会发现这个错误。

解决方案:

  1. 关闭Visual Studio
  2. 进行系统清理
  3. 重新启动计算机
  4. 以管理员身份打开Visual Studio
  5. 选择您的项目
  6. 清理
  7. 重新生成

0
在我的情况下,某种方式我的exe文件在发布中丢失了。不确定是怎么发生的。我用debug中的一个副本替换它,一切都很好。我应该更早地检查这个问题,但从未想过文件会突然消失。

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