我为 NUnit 单元测试编写了一个自定义类库。 它在 {project root}\bin\Debug\ 文件夹中创建了一个包含我的 .NET IL 代码的 dll 文件。 在此类库中运行 NUnit 单元测试工作正常,但是如果我尝试再次编译我的类库,则会收到此错误。 NUnit 没有释放锁。 是什么原因造成的? 如何防止这种情况发生?
首次运行 NUnit 后编译时出现 Visual Studio 错误:
错误 {错误 #} {类库项目名称} 无法将文件 {类库项目根文件夹} + "\bin\调试\测试.dll"复制到"bin\调试\测试.dll"。进程无法访问文件"bin\Debug\Tests.dll,因为它正被另一个进程使用。
因此,我可以更改代码的唯一方法是关闭 NUnit 并重新打开 NUnit。 我正在使用 NUnit 2.6。 这很烦人。
我发现处理这个问题的唯一方法是重新启动 NUnit。这将释放锁,但是下次运行测试时可能会遇到相同的问题。
但是,您可以查看以下信息,这可能会有所帮助:
根据此谷歌群组线程,这可能是重新加载设置
请参阅程序集隔离部分
或最后:
它可能是您的代码库的位置?
我找到了原因。 也许 NUnit 开发人员可以解决这个问题。 现在,我有下面描述的解决方法。
如果您没有您的 *.nunit,则 *。类库根文件夹中的 VisualState.xml(自动生成的 NUnit 文件)和 *.config(使用 System.Configuration 而不是 NUnit 的配置文件设置从 Visual Studio 类库引用的 NUnit 配置文件),将发生这种情况。 (我的 *.config 文件与我的 *.nunit 文件命名相同,所以我有 Tests.config 和 Test.nunit,两者都共享名称"Tests")
因此,例如,当我收到此错误时,我有以下设置:
我的类库称为"Tests.csproj"。 假设 Tests.csproj 位于 "C:\Source\Tests\" 中。 这将使"C:\Source\Tests\"成为我的项目文件夹的根目录。 我的dll在"C:\Source\Tests\bin\Debug\Tests.dll"中。 上面描述的 NUnit 文件位于 "C:\Source\Tests\NUnit\" 中。
当我将 NUnit 文件移动到"C:\Source\Tests\"(类库项目根文件夹)时,当我尝试编译 Visual Studio 类库项目时,我没有得到此问题。 导致此问题的此文件夹结构必须混淆 NUnit 程序。
我有一个单独的文件夹的原因是将所有 NUnit 文件分开。 修复此问题后,我为所有 *.nunit、*.xml 和 *.config 文件加上"nunit_"前缀,以便将它们全部组合在一起。