NUnit:“进程无法访问该文件......因为它正被另一个进程使用。”

时间:2009-06-01 15:10:27

标签: nunit

我正在使用NUnit GUI版本,当我在那里加载测试项目试图测试时,它开始对我感到不安。如果我在Visual Studio中进行更改,然后尝试重建解决方案,则会抛出错误“无法将文件obj \ Debug \ foo.dll复制到bin \ Debug \ foo.dll。进程无法访问文件bin \ Debug \ foo.dll,因为它被另一个进程使用。“

这是我加载到GUI中的DLL,当然。它曾经没问题,只是在构建后刷新项目引用,但现在它似乎阻止了它。我怎样才能回到那种行为?

顺便说一下,我尝试启用/禁用卷影复制设置,但结果相同。

VS2008 SP1和NUnit 2.4.8,如果重要的话。

6 个答案:

答案 0 :(得分:37)

想出来:“卷影复制”服务由于某种原因被关闭了。把它重新打开,一切都恢复正常。

答案 1 :(得分:10)

我只是想补充一点,将Nunit项目文件移动到解决方案位置解决了我的问题。我没有必要在nunit中更改任何卷影复制设置或启用卷影复制服务。

请参阅堆栈溢出 - nunit locking dll

答案 2 :(得分:3)

我遇到了与问题中提到的问题相同的问题。我通过以下方式在我的机器上解决了它:

  1. 在Visual Studio中>解决方案浏览器>选择导致问题的dll>右键单击>选择属性。执行此操作后,现在应该可以看到dll的File属性。
  2. 在dll的文件属性视图中;将复制到输出目录设置为如果更新则复制。
  3. 如果您将复制到输出目录作为始终复制,您将收到问题中提到的编译错误。如果您进行上述更改,它应该消失,您的dll仍将被复制。

答案 3 :(得分:2)

我遇到了同样的问题:

Unable to copy file obj\Debug\foo.dll to bin\Debug\foo.dll. 
The process cannot access the file bin\Debug\foo.dll because it is being used by another process.

我的案例中的原因似乎是我在两个程序集中使用了相同的命名空间:

  1. MyNUnitTestLibrary'包装'“命名空间银行{...}”中的测试类
  2. 'NUnit Quick Start'也包含了“namespace bank {...}”
  3. 中的所有内容

    更改其中一个命名空间名称解决了问题。 我对两个程序集进行了一些更改,并重新编译而没有错误

    请注意,两个程序集都包含测试,因为我正在使用NUnit。

答案 4 :(得分:1)

我也有这个问题,但今天我很想重现它。论坛似乎表明,这是由于您的代码没有回馈它正在使用的资源。当我遇到这个问题时,我就会测试一个Xml阅读器,这会敲响钟声。

以下是我找到on asp.net

的链接

答案 5 :(得分:1)

我遇到了这个问题,经过大量的阅读和实验,我意识到罪魁祸首实际上并不是NUnit或我的代码中的任何东西。这是我使用的另一个库,FakeItEasy,一个模拟对象框架,无法正确释放所有资源。

如果您在NUnit中使用FakeItEasy并遇到此问题,请考虑切换到另一个模拟对象框架。如果您没有使用FakeItEasy,或者从项目中删除它并不能解决这个问题,请从测试代码中清点您正在使用的所有第三方库,并考虑它们中是否有任何类似的东西。

或者,讨论NUnit的创建者明确释放它加载的任何测试程序集所持有的任何资源,或者如果你比我更加积极主动,那么利用它是一个开源项目并贡献一个这样做的解决方案。