2014-04-30 21 views
7

Ich habe einen NUnit-Komponententest, der in eine normale F # -Bibliothek geschrieben wurde, aber auf F # -Code in einer Portable Class Library abzielt.MissingMethodException beim Ausführen eines Komponententests mit FSharp.Data

Wenn ich diesen Test durchgeführt (in Visual Studio 2013), erhalte ich die folgende Ausnahme:

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

Dies ist, was ich in meinem app.config in der Portable Klassenbibliothek haben:

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

Dies ist, was ich in der app.config meiner normalen F # -Bibliothek haben:

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

Antwort

4

Offenbar hat FSharp.Data nicht PCL-Bibliotheken unterstützt mit Profil 7. Nach meinem PCL-Projekt zu ändern Profil bis 47 alles funktioniert wie erwartet.

4

The MissingMethodExceptio n bedeutet genau das (in Bezug auf die Signatur).

Es klingt wie Ihr Testcode hat keinen Verweis auf die Version FSharp.Data DLL, die Ihre tragbare Bibliothek verwendet.

Die Methodensignatur für asyncReadTextAtRuntime wurde erst kürzlich geändert, daher müssen Sie in Ihrem Testprojekt auf die neueste Version verweisen.

Sehen Sie diese GitHub begehen, wo die Funktion geändert wurde einen zusätzlichen Parameter formatName genannt zu nehmen:

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

+0

Das scheint nicht der Fall zu sein, da die DLL-Datei FSharp.Data im Ausgabeordner genau die gleiche ist wie die, auf die verwiesen wird. Ich werde versuchen, ein anderes PCL-Profil als das zu verwenden, das ich verwendete (neues Profil 7) wird anscheinend nicht empfohlen: https://github.com/fsharp/FSharp.Data/issues/605 –

+0

@ tiago-margalho Awww, Pech Mann. War einen Versuch wert :-( – Scott

1

Ich hatte das gleiche Problem, und es war nichts mit PCLs, dass ich bewusst war. eine explizite Bindung Umleitung in dem (C#) Testprojekt für FSharp.Core machte es weggehen (eigentlich hatte ich das gleiche Problem in LINQPad auch)

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

(Das Testprojekt in C# hat keine direkten FSharp Referenzen Hinzufügen von selbst , anders als was es von den F # -Projekten erbt, die es testet)

0

Ich aktualisierte meine Version der DLL zu einer früheren Version.

In meinem Fall versuchte ich Typ Provider in der FSharp.Data DLL zu verwenden.

Ich aktualisierte FSharp.Data zu einer früheren Version und der Fehler ging weg.

Verwandte Themen