【问题标题】:NUnit keeps running the wrong version of a .dllNUnit 不断运行错误版本的 .dll
【发布时间】:2015-02-13 19:33:04
【问题描述】:

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

我有使用 NLog 工具的温莎城堡 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 来确保一切正常。当我运行此集成测试时,我不断收到相同的错误 “找不到 NLog 2.0”。我确保以上内容在我的 test.dll app.config 中,并且还尝试将其添加到 nunit 测试运行器配置文件中。还是不行。如何让 NUnit 确保在测试运行时找到并应用此设置?

【问题讨论】:

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


    【解决方案1】:

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

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

    即使上述运行时配置设置已在 test.dll.config 中正确设置,nunit 项目也不知道使用 test.dll.config 文件。我一直认为它是 nunit 隐式知道的,但显然它需要显式设置。

    【讨论】:

      【解决方案2】:

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

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

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

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

      我在使用 newtonsoftJson 软件包 dll 时遇到了这个问题,并以这种方式解决了它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-10
        • 2012-07-14
        • 1970-01-01
        • 1970-01-01
        • 2017-12-20
        • 2022-12-12
        相关资源
        最近更新 更多