FsUnit:由于它和具有不同 F#.Core 版本的测试项目,无法测试可移植库
FsUnit: Unable to test portable library due to it and test project having different F#.Core versions
我有一个便携式图书馆,FSharp.Core
版本是 3.7.4.0
。安装(在单元测试项目中)FsUnit
作为依赖项安装 FSharp.Core
版本 3.1.2.5
。
因此,在我的单元测试项目中使用可移植库的函数,例如:
module StammaTests.PieceTests
open Stamma
open NUnit.Framework
open FsUnitTyped
[<Test>]
let ``Testing a Basic function`` () =
Piece.toChar Black King |> shouldEqual 'k'
产生错误:
Result Message: System.IO.FileLoadException : Could not load file or assembly 'FSharp.Core, Version=3.7.4.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The
located assembly's manifest definition does not match the assembly
reference. (Exception from HRESULT: 0x80131040)
尝试将 FSharp.Core
版本从 NuGet 更新到 4.0.0.1
(甚至在更新时检查两个项目),现在甚至是一些简单的东西:
[<Test>]
let ``Testing the test`` () = 1 |> shouldEqual 1
不起作用,出现类似的错误。
Result Message: System.IO.FileLoadException : Could not load file or
assembly 'FSharp.Core, Version=4.3.1.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The
located assembly's manifest definition does not match the assembly
reference. (Exception from HRESULT: 0x80131040)
并且第一个失败测试的错误没有改变。
我觉得我遗漏了一些非常明显的东西,我发现有几个人有类似的问题,但我不明白他们做了什么来解决它(他们似乎都已经解决了..)例如.
编辑
这两个项目都是库,我没有 app.config
文件可以添加任何内容。
在您的 app.config
文件中添加绑定重定向,以将所有 FSharp.Core
绑定重定向到您想要的版本。例如,要使用版本 4.4.0,您的 app.config
文件将如下所示:
<?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.4.0.0" newVersion="4.4.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
我找到了一个实际有效的解决方案here
基本上就是在test项目中添加一个App.config
,写成如下:
<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>
它为 Fsharp.Core
和 NUnit.Framework
添加了绑定,不像通常的解决方案,您只为 Fsharp.Core
添加绑定。
我有一个便携式图书馆,FSharp.Core
版本是 3.7.4.0
。安装(在单元测试项目中)FsUnit
作为依赖项安装 FSharp.Core
版本 3.1.2.5
。
因此,在我的单元测试项目中使用可移植库的函数,例如:
module StammaTests.PieceTests
open Stamma
open NUnit.Framework
open FsUnitTyped
[<Test>]
let ``Testing a Basic function`` () =
Piece.toChar Black King |> shouldEqual 'k'
产生错误:
Result Message: System.IO.FileLoadException : Could not load file or assembly 'FSharp.Core, Version=3.7.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
尝试将 FSharp.Core
版本从 NuGet 更新到 4.0.0.1
(甚至在更新时检查两个项目),现在甚至是一些简单的东西:
[<Test>]
let ``Testing the test`` () = 1 |> shouldEqual 1
不起作用,出现类似的错误。
Result Message: System.IO.FileLoadException : Could not load file or assembly 'FSharp.Core, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
并且第一个失败测试的错误没有改变。
我觉得我遗漏了一些非常明显的东西,我发现有几个人有类似的问题,但我不明白他们做了什么来解决它(他们似乎都已经解决了..)例如
编辑
这两个项目都是库,我没有 app.config
文件可以添加任何内容。
在您的 app.config
文件中添加绑定重定向,以将所有 FSharp.Core
绑定重定向到您想要的版本。例如,要使用版本 4.4.0,您的 app.config
文件将如下所示:
<?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.4.0.0" newVersion="4.4.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
我找到了一个实际有效的解决方案here
基本上就是在test项目中添加一个App.config
,写成如下:
<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>
它为 Fsharp.Core
和 NUnit.Framework
添加了绑定,不像通常的解决方案,您只为 Fsharp.Core
添加绑定。