无法编译,因为Visual Studio正在使用我的DLL

时间:2011-08-04 14:40:38

标签: c# visual-studio-2008 .net-2.0

我在Visual Studio 2008中有一个相当大的.NET 2.0解决方案(151个项目)。很多时候我在VS中进行构建(即使只是一个项目)我得到一个错误,说它无法复制其中一个我的DLL程序集到输出目录,因为它正在使用中。我没有在后台运行任何其他进程或现有的调试会话将使用此程序集。如果我打开Process Explorer并搜索此程序集名称,Visual Studio(devenv.exe)将成为唯一的结果。查看结果Visual Studio由于某种原因将我的程序集加载为DLL。关闭解决方案并重新打开它并不能解决问题。我必须完全退出VS以解决这个非常具有破坏性的问题。有谁知道发生了什么事?我在Window 7上运行,我认为我在Windows XP上没有看到这个问题。

我正在运行Visual Studio 2008版本9.0.30729.1 SP。如果重要的话,我也在运行ReSharper 6.

7 个答案:

答案 0 :(得分:3)

  

有谁知道发生了什么事?我在Window 7上运行,我   不要以为我在Windows XP上看到了这个问题。

我在Windows XP上一直遇到这个问题,它甚至没有本地化到Visual Studio 2008.对我来说总是有用的是我只是清理所有解决方案,这可以删除系统内存中可能存在的任何文件,因为Visual Studio。

Visual Studio会将您的任何引用保留在内存中,因此当其中一个引用更新时,Visual Studio必须从内存中释放它。如果真的发生了“偶尔”,那么你可能会尝试减少项目中的解决方案数量。

答案 1 :(得分:1)

使用以下命令将其置于visual studio的“预构建事件”中:

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

希望这会对你有所帮助。

答案 2 :(得分:1)

尝试停用托管流程:

在Visual Studio中打开可执行项目。不生成可执行文件的项目(例如,类库或服务项目)没有此选项。

  1. 在“项目”菜单上,单击“属性”。

  2. 单击“调试”选项卡。

  3. 清除“启用Visual Studio主机进程”复选框。

答案 3 :(得分:1)

终止进程VBCSCompiler.exe并重建。

答案 4 :(得分:0)

我猜这个dll正由(ProjectName).vshost.exe进程使用。您可以尝试杀死该过程,看看是否有效。可能不是最好的事情,但它可能比重新启动VS更容易。

答案 5 :(得分:0)

在构建之前,我会尝试“Clean Solution”选项。这可以清除程序崩溃中可能存在的任何无关的临时文件。

答案 6 :(得分:0)

我不知道为什么会这样,但我遇到了同样的问题,当我将启动项目更改为项目时,我想再次构建一切。

当我再次将Startup项目更改为正确项目时,由于文件正在使用,我无法再构建另一个项目,因此看起来像Visual Studio IDE中的错误。