System.MissingMethodException when using certain methods from FSharp PowerPack and compiling to a Class Library

f#, f#-powerpack, missingmethodexception

Solution

I wonder if this is related to binding redirects. You may need to copy the app.config in the application project to the library project.

This sounds similar to a known issue that I'm currently writing a blog post about for the F# team blog (probably to appear in the next few weeks) regarding MSTest rather than NUnit. I would try copying the app.config into the library project, and if that doesn't work, then use the online template for unit testing here:

http://visualstudiogallery.msdn.microsoft.com/51ebe64a-899b-4959-8c24-b0148ed6b264

and additionally select 'TEST\Test Settings\Select Test Settings File' from the menu in VS, and point it at the 'MSTest.runsettings' file included in the unit test project template. I expect that one of those two tweaks will fix it in the MSTest case.

Problem

So I'm just getting started with F#, and I'm encountering a very weird issue where I get a System.MissingMethodException thrown when using certain methods from the FSharp PowerPack. This does not happen for all methods in the same module. It also does not happen if I compile my assembly as an Application instead of a class library. Reproduction steps: - Create 2 assemblies, one Class Library and one Application. - Add nunit.framework and the FSharp.PowerPack DLLs as references to both assemblies. Create the following test fixture in each assembly. ``` 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 ``` - Compile both assemblies. - Open each assembly in NUnit and run all the tests. When I do this the Application runs just fine (all tests pass), but the Class Library fails with the following exception: ``` 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() ``` What is going on here? Another method that produces the issue is matrix.PermuteColumns. Additional Info: - I'm compiling both assemblies for .NET 4.5 - I'm compiling using Visual Studio 2012 RC - I'm using NUnit version 2.5.10.11092 - I'm using FSharp PowerPack version 2.1.3.1 (though the DLL properties state that it's 2.0.0) Let me know if there's additional information that would be of use.

Original source