NUnit一直运行错误的.dll版本

时间:2015-02-13 19:33:04

标签: c# nunit inversion-of-control castle-windsor nlog

我正在使用NUnit 2.6.4测试运行器。我正在运行.nunit项目文件来加载我的.csproj测试。它一直运行错误的依赖版本 背景:

我有使用NLog设施的城堡windsor 3.3。我使用的是NLog 3.2。默认情况下,Windsor尝试加载NLog 2.0并抛出错误"无法加载NLog 2.0"。所以我将以下内容添加到我的exe文件的app.config文件中,告诉Windsor加载NLog 3.2:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

现在,我来到我的NUnit。我正在尝试运行我的集成测试(我的单元和功能测试很好,因为我们在这些测试中不使用IoC),在集成测试中我们使用Windsor IoC来确保一切正常。当我运行此集成测试时,我不断收到相同的错误  &#34;找不到NLog 2.0&#34;。我确保上面的内容在我的test.dll app.config中,并尝试将其添加到nunit test runner配置文件中。仍然没有去。如何让NUnit确保在测试运行时找到并应用此设置?

2 个答案:

答案 0 :(得分:0)

将以下内容添加到.nunit项目文件可以解决此问题:

configfile="Hl7ic.Engine.Test.dll.config"

即使在test.dll.config中正确设置了上述运行时配置设置,nunit项目也不知道使用te​​st.dll.config文件。我一直认为nunit隐含地知道它,但显然它需要明确设置。

答案 1 :(得分:0)

在每个VS项目中都有一个&#39; obj&#39; VS保存程序集引用缓存的文件夹。有时这个缓存是问题所在。对于这个问题,我有一个脚本,您可以在构建之前安全地从PowerShell运行。

Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse } 

当您在解决方案文件夹中时运行此脚本。此脚本将递归获取解决方案的所有bin和obj文件夹,并将其删除。当您重建解决方案时,它将生成全新的程序集引用缓存,并且您的问题可能会得到解决。

还要确保已删除以前版本的软件包的文件夹。当您更新项目中的包时,其文件夹将不会被自动删除,这也可能导致问题。

我遇到了newtonsoftJson包dll的这个问题并以这种方式解决了。