2014-04-30 9 views
7

Mam test jednostki NUnit, który jest napisany w normalnej bibliotece F #, ale jest kierowany do kodu F # w bibliotece przenośnych klas.MissingMethodException podczas uruchamiania testu jednostki, który używa FSharp.Data

Kiedy uruchomić ten test (Visual Studio 2013), pojawia się następujący wyjątek:

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)'. 

To jest to, co mam w moim app.config w Portable Class Library:

<?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> 

to jest to, co mam w app.config mojej normalnej F # biblioteki:

<?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> 

Odpowiedz

4

Najwyraźniej FSharp.Data nie obsługuje bibliotek PCL z wykorzystaniem profilu 7. Po zmianie mojego projektu PCL profil do 47 wszystko działa zgodnie z oczekiwaniami.

4

The MissingMethodExceptio n oznacza dokładnie to (pod względem podpisu).

Wygląda na to, że kod testowy nie zawiera odniesienia do wersji biblioteki DLL FSharp.Data używanej przez bibliotekę przenośną.

Podpis metody dla asyncReadTextAtRuntime został zmieniony bardzo niedawno, dlatego należy odwołać się do najnowszej wersji w projekcie testowym.

Zobacz ten GitHub popełnienia, gdzie funkcja została zmieniona, aby wziąć dodatkowy parametr o nazwie formatName:

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

+0

Nie wydaje się, aby tak było, ponieważ plik DLL FSharp.Data w folderze wyjściowym jest dokładnie taki sam, jak ten, do którego się odwołuje. Spróbuję użyć innego profilu PCL, niż ten, z którego korzystałem (nowy profil 7) najwyraźniej nie jest zalecany: https://github.com/fsharp/FSharp.Data/issues/605 –

+0

@ tiago-margalho Awww, pech człowiek. Warto było spróbować :-( – Scott

1

Miałem ten sam problem i nie było to nic wspólnego z PCL, o których wiedziałem. Dodawanie wyraźne wiązanie przekierowanie w (C#) projektu badawczego dla FSharp.Core wykonane odejść (a właściwie miałem ten sam problem LINQPad również)

<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> 

(Projekt badania w C# nie ma bezpośredniego odniesienia FSharp sama , inne niż to, co dziedziczy z projektów F #, które testuje)

0

Zaktualizowałem moją wersję biblioteki DLL do wcześniejszej wersji.

W moim przypadku próbowałem użyć dostawców typu w bibliotece DLL FSharp.Data.

Zaktualizowałem FSharp.Data do wcześniejszej wersji i błąd zniknął.