由于F#库中的DLL加载问题,NUnit测试失败

Sco*_*rod 2 f# nunit assembly-binding-redirect

在将NUnit与F#一起使用之前,我遇到过这个问题:

无法加载文件或程序集'nunit.framework,Version = 2.6.3.13283

我已将我的FSharp.Core版本降级为较低的版本号.我不确定我需要做什么来让我的测试运行没有任何例外.

module Foo

open NUnit.Framework
open FsUnit

[<Test>]
let ``some test``() =
    1 |> should equal 1
Run Code Online (Sandbox Code Playgroud)

Packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="FSharp.Core" version="4.0.0.1" targetFramework="net46" />
  <package id="FsUnit" version="1.4.1.0" targetFramework="net46" />
  <package id="NUnit" version="2.6.4" targetFramework="net46" />
  <package id="NUnitTestAdapter" version="2.0.0" targetFramework="net46" />
  <package id="xunit" version="2.1.0" targetFramework="net46" />
  <package id="xunit.abstractions" version="2.0.0" targetFramework="net46" />
  <package id="xunit.assert" version="2.1.0" targetFramework="net46" />
  <package id="xunit.core" version="2.1.0" targetFramework="net46" />
  <package id="xunit.extensibility.core" version="2.1.0" targetFramework="net46" />
  <package id="xunit.extensibility.execution" version="2.1.0" targetFramework="net46" />
  <package id="xunit.runner.visualstudio" version="2.1.0" targetFramework="net46" />
</packages>
Run Code Online (Sandbox Code Playgroud)

Tom*_*cek 8

这很可能是因为FsUnit引用了旧版本的nunit.framework(2.6.3),但您的应用程序是针对较新版本的NUnit(2.6.4)编译的.

解决此问题的方法是添加app.config到测试项目中,该项目将NUnit的所有版本映射到您在项目中引用的版本.像这样的东西:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="nunit.framework"  
             publicKeyToken="96d09a1eb7f44a77" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-9999.9999.9999.9999" 
             newVersion="2.6.4.14350" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

最近一个项目中解决了完全相同的问题,所以上面的内容可能对您nunit.framework.dll有用- 但如果没有,请检查您使用ILSpy等工具的版本.我有2.6.4.14350,但你可能有另一个.