7

我有一个 NUnit 单元测试,它是用普通的 F# 库编写的,但以可移植类库中的 F# 代码为目标。

当我运行此测试时(在 Visual Studio 2013 中),我得到以下异常:

Result Message: System.MissingMethodException : Method not found:
 'Microsoft.FSharp.Control.FSharpAsync`1<System.IO.TextReader> FSharp.Data.Runtime.IO.asyncReadTextAtRuntime(System.Boolean, System.String, System.String, System.String, System.String)'.

这是我在可移植类库中的 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-3.3.1.0" newVersion="3.3.1.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

这是我在普通 F# 库的 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.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.3.13283" newVersion="2.6.3.13283" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
4

4 回答 4

4

MissingMethodException 正是这个意思(就签名而言)。

听起来您的测试代码没有引用FSharp.Data您的可移植库正在使用的 DLL 版本。

的方法签名asyncReadTextAtRuntime是最近更改的,因此您必须在测试项目中引用最新版本。

请参阅此 GitHub 提交,其中函数已更改为采用名为的附加参数formatName

https://github.com/fsharp/FSharp.Data/commit/be3651f314b7a13b57a755a728287373adda775d#diff-a47e4306ce1338946e18435ee1e97c50R304

于 2014-05-01T04:52:45.550 回答
4

显然,FSharp.Data 不支持使用配置文件 7 的 PCL 库。将我的 PCL 项目配置文件更改为 47 后,一切都按预期工作。

于 2014-05-01T08:39:19.197 回答
1

我遇到了同样的问题,这与我所知道的 PCL 无关。在 FSharp.Core 的 (C#) 测试项目中添加显式绑定重定向使其消失(实际上我在 Linqpad 中也遇到了同样的问题)

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-999.999.999.999" newVersion="4.4.0.0" />
  </dependentAssembly>
</assemblyBinding>

(C# 中的测试项目本身没有直接的 FSharp 引用,除了它从它正在测试的 F# 项目继承的内容之外)

于 2016-11-24T03:45:22.757 回答
0

我将我的 DLL 版本更新为早期版本。

就我而言,我试图在 FSharp.Data DLL 中使用类型提供程序。

我将 FSharp.Data 更新为早期版本,错误消失了。

于 2017-02-19T13:37:27.510 回答