3

我正在玩 F# 中的单元测试。我正在运行 Visual Studio 2013 社区版。我创建了一个测试项目并安装NUnit 2.6.4FsUnit 1.3.0.1. 我使用了包管理器控制台。我在项目中添加了对库的引用,在我的脚本文件中我引用了 DLL 并添加了open子句:

#r @"C:\Users\pw\Documents\Visual Studio 2013\Projects\FSharpForQuantFirst\packages\FsUnit.1.3.0.1\Lib\Net40\FsUnit.NUnit.dll"
#r @"C:\Users\pw\Documents\Visual Studio 2013\Projects\FSharpForQuantFirst\packages\NUnit.2.6.4\lib\nunit.framework.dll" 

open NUnit.Framework
open NUnit.Framework.Constraints
open FsUnit

1 |> should equal 1

我的代码中没有错误或警告。但是,当我在 F# Interactive 中运行代码时,最后一行会触发以下错误:

Test.fsx(8,6): error FS0074: 通过引用的类型'NUnit.Framework.Constraints.Constraint'是在未引用的程序集中定义的。您必须添加对 assembly 的引用'nunit.framework'

但我已经添加了对nunit.framework.

我清理了项目,重新安装了软件包,删除并添加了引用,但结果是一样的。我仍然得到错误。知道问题出在哪里以及如何解决吗?

4

1 回答 1

2

如果您可能已经注意到,有一个app.config带有绑定重定向的nunit.framework.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="nunit.framework" publicKeyToken="96d09a1eb7f44a77" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.6.4.14350" newVersion="2.6.4.14350" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

F# Interactive 没有考虑到这一点,因此您必须NUnit 2.6.3使用FsUnit.NUnit.dll.

请降级NUnit2.6.3确保重置 F# Interactive 会话。

于 2015-02-10T07:15:01.260 回答