4

我为 NUnit 单元测试编写了一个自定义类库。它在 {project root}\bin\Debug\ 文件夹中创建了一个包含我的 .NET IL 代码的 dll 文件。在这个类库中运行 NUnit 单元测试工作正常,但是如果我尝试再次编译我的类库,我会收到这个错误。NUnit 没有释放锁。这是什么原因造成的?我怎样才能防止这种情况发生?

NUnit 首次运行后编译时出现 Visual Studio 错误:

错误 {error #} {class library project name} 无法将文件 {class library project root folder} +“\bin\Debug\Tests.dll”复制到“bin\Debug\Tests.dll”。该进程无法访问文件“bin\Debug\Tests.dll”,因为它正被另一个进程使用。

所以我可以更改代码的唯一方法是关闭 NUnit 并重新打开 NUnit。我正在使用 NUnit 2.6。这很烦人。

4

2 回答 2

1

我发现解决这个问题的唯一方法是重新启动 NUnit。这会释放锁定,但是下次运行测试时可能会遇到同样的问题。

但是,您可以查看可能有帮助的信息:

根据这个 google groups 线程,这可能是一个重新加载设置

请参阅装配隔离部分

或者最后:

它可能是您的代码库的位置?

于 2012-04-09T17:00:14.167 回答
1

我找到了原因。也许 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_”,因此它们都组合在一起。

于 2012-04-09T17:14:38.593 回答