所以我刚刚开始使用 F#,我遇到了一个非常奇怪的问题,当使用 FSharp PowerPack 中的某些方法时,我得到了 System.MissingMethodException。
同一模块中的所有方法都不会发生这种情况。如果我将程序集编译为应用程序而不是类库,也不会发生这种情况。
复制步骤:
- 创建 2 个程序集,一个类库和一个应用程序。
- 添加 nunit.framework 和 FSharp.PowerPack DLL 作为对这两个程序集的引用。
在每个程序集中创建以下测试夹具。
open NUnit.Framework [<TestFixture>] type Tests() = class [<Test>] member self.OfSeq() = // Will always succeed Matrix.Generic.ofSeq [[1]] |> ignore [<Test>] member self.OfList() = // Will fail under certain conditions with a System.MissingMethodException Matrix.Generic.ofList [[1]] |> ignore end
- 编译这两个程序集。
- 在 NUnit 中打开每个程序集并运行所有测试。
当我这样做时,应用程序运行得很好(所有测试都通过),但类库失败并出现以下异常:
System.MissingMethodException : Method not found: 'Microsoft.FSharp.Math.Matrix`1<!!0> Generic.ofList(Microsoft.FSharp.Collections.FSharpList`1<Microsoft.FSharp.Collections.FSharpList`1<!!0>>)'.
at Temp2.Tests.OfList()
这里发生了什么?
产生此问题的另一种方法是 matrix.PermuteColumns。
附加信息:
- 我正在为 .NET 4.5 编译两个程序集
- 我正在使用 Visual Studio 2012 RC 进行编译
- 我正在使用 NUnit 版本 2.5.10.11092
- 我正在使用 FSharp PowerPack 版本 2.1.3.1(尽管 DLL 属性声明它是 2.0.0)
让我知道是否有其他有用的信息。