2016-05-07 4 views
1

ich eine .NET-Klasse definiert haben, wie dies in einem F # -Projekt:Konsumieren F # aus einem C# -Projekt: eine Erste „Methode nicht gefunden“

type public StockAnalyzer() = 
    member public this.GetStockClose ticker = 
     try 
      let stockInfo = YahooContext.Load("http://ichart.finance.yahoo.com/table.csv?s=" + ticker) 
      let mostRecent = stockInfo.Rows |> Seq.head 
      (float)mostRecent.``Adj Close`` 
     with 
      | :? System.Net.WebException -> -1.0 

Wenn ich versuche, und dies aus einem C# Unit-Test-Projekt laufen und ein ASP.NET applciation, erhalte ich diese:

Methode nicht gefunden: ‚Microsoft.FSharp.Control.FSharpAsync`1

diese Klasse hat auch ein anderes Verfahren, das u sind sing

message.Content.ReadAsStringAsync().Result 

verursacht das Interop auf dem async fehlschlagen? Obwohl ich diese Methode nicht einmal anrufe?

+0

Fügen Sie verbindliche Umleitung für FSharp.Core –

Antwort

1

Um zu erweitern, was Fyodor Soikin in seinem Kommentar sagte, geschieht dies oft als Folge von nicht übereinstimmenden Versionen von FSharp.Core zwischen dem Unit-Test-Projekt und was auch immer Sie versuchen zu testen.

Sie können eine Bindungsumleitung erstellen, die die Verweise auf eine andere Version von FSharp.Core umleitet.

<?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.0.0" newVersion="4.3.1.0" /> 
     </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

See: https://fsharp.github.io/2015/04/18/fsharp-core-notes.html#use-binding-redirects-for-applications

Diese Seite ist natürlich auch für andere Informationen, die Sie auf FSharp.Core benötigen könnten Sie tun dies, indem sie eine App.config Datei in Ihrem Projekt zu schaffen, ist es in etwa so aussehen sollte.

P.S. Beachten Sie die Versionsnummern. Es könnte sein, dass Sie tatsächlich zu FSharp.Core Version 4.4.0.0 (F # 4.0) umleiten müssen

+0

Die F # ist ein 4.4, so fügte ich FS.Core 4.4 zu der C# und es sagte, es wollte 4.3. Die Umleitung hat nicht funktioniert. Das F # -Projekt auf 4,3 zu bringen, hat gut funktioniert. Vielen Dank –