我正在使用NUnit GUI版本,当我在那里加载测试项目试图测试时,它开始对我感到不安。如果我在Visual Studio中进行更改,然后尝试重建解决方案,则会抛出错误“无法将文件obj \ Debug \ foo.dll复制到bin \ Debug \ foo.dll。进程无法访问文件bin \ Debug \ foo.dll,因为它被另一个进程使用。“
这是我加载到GUI中的DLL,当然。它曾经没问题,只是在构建后刷新项目引用,但现在它似乎阻止了它。我怎样才能回到那种行为?
顺便说一下,我尝试启用/禁用卷影复制设置,但结果相同。
VS2008 SP1和NUnit 2.4.8,如果重要的话。
答案 0 :(得分:37)
想出来:“卷影复制”服务由于某种原因被关闭了。把它重新打开,一切都恢复正常。
答案 1 :(得分:10)
我只是想补充一点,将Nunit项目文件移动到解决方案位置解决了我的问题。我没有必要在nunit中更改任何卷影复制设置或启用卷影复制服务。
请参阅堆栈溢出 - nunit locking dll
答案 2 :(得分: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.
我的案例中的原因似乎是我在两个程序集中使用了相同的命名空间:
更改其中一个命名空间名称解决了问题。 我对两个程序集进行了一些更改,并重新编译而没有错误
请注意,两个程序集都包含测试,因为我正在使用NUnit。
答案 4 :(得分:1)
我也有这个问题,但今天我很想重现它。论坛似乎表明,这是由于您的代码没有回馈它正在使用的资源。当我遇到这个问题时,我就会测试一个Xml阅读器,这会敲响钟声。
以下是我找到on asp.net
的链接答案 5 :(得分:1)
我遇到了这个问题,经过大量的阅读和实验,我意识到罪魁祸首实际上并不是NUnit或我的代码中的任何东西。这是我使用的另一个库,FakeItEasy,一个模拟对象框架,无法正确释放所有资源。
如果您在NUnit中使用FakeItEasy并遇到此问题,请考虑切换到另一个模拟对象框架。如果您没有使用FakeItEasy,或者从项目中删除它并不能解决这个问题,请从测试代码中清点您正在使用的所有第三方库,并考虑它们中是否有任何类似的东西。
或者,讨论NUnit的创建者明确释放它加载的任何测试程序集所持有的任何资源,或者如果你比我更加积极主动,那么利用它是一个开源项目并贡献一个这样做的解决方案。