2012-10-25 13 views
5

Ich versuche, eine tragbare Bibliothek mit F # zu erstellen, um mit Windows Store-Apps zu verwenden. Ich erstellte eine fs-Datei mit einer Klasse:Windows Store Apps und F #

module FunctionalRT 

open System.Net 
open System.IO 

type WebHelper = 

    static member DownloadStringAsync (url:string) = async { 
     let req = HttpWebRequest.Create(url) 
     use! resp = req.AsyncGetResponse() 
     use stream = resp.GetResponseStream() 
     let reader = new StreamReader(stream) 
     let s = reader.ReadToEnd() 
     return s 
    } 

Ich referenzierte diese Bibliothek in meiner Windows Store App ohne Probleme. Aber das Problem ist, ich kann weder das FunctionalRT Modul noch die WebHelper Klasse zugreifen. Wenn ich using FunctionalRT schreibe oder versuche, FunctionalRT.WebHelper.FunctionalRT zu verwenden, beschwert sich der Compiler, es weiß es nicht. Was könnte das Problem sein?

EDIT: Nach einigen buidls und reinigt ich

The type 'Microsoft.FSharp.Control.FSharpAsync`1<T0>' is defined in an assembly that is not referenced. You must add a reference to assembly 'FSharp.Core, Version=2.3.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. C:\Users\Igor\Documents\Visual Studio 2012\Projects\App3\App3\GroupedItemsPage.xaml.cs 46 13 App3 

EDIT erhalten:

einen Verweis auf C:\Program Files (x86)\MSBuild\..\Reference Assemblies\Microsoft\FSharp\3.0\Runtime\.NETPortable\FSharp.Core.dll die obige Fehlermeldung gelöst Hinzufügen, aber es ist eine andere

Cannot await 'Microsoft.FSharp.Control.FSharpAsync<string>' 
+0

Haben Sie sichergestellt, dass alle Referenzen (sowohl von .Net als auch von Drittanbietern) WinRT-kompatibel sind? –

+0

Es gibt nur 2 Projekte: Windows 8 App (App3) und F # Portable Library (FunctionalRT mit Zielframework: .NET für Windows Store Apps, .NET Framework 4.5, Silverlight 5) und App3 hat einen Verweis auf FunctionalRT –

+0

Ich glaube, der Fehler Die Nachricht besagt, dass das C# -Projekt auch auf FSharp.Core (WinRT-Version, natürlich) verweisen sollte. Ich gehe davon aus, dass nur das F # -Projekt FSharp.Core referenziert? Wenn ich richtig bin, würde dieser Fehler auch beim Schreiben einer regulären C# -F # -Anwendung erscheinen. –

Antwort

7

Sie müssen re

C: Konferenz diese Bibliothek in Ihrer Anwendung Windows Store, damit es funktioniert \ Program Files (x86) \ Referenz Assemblies \ Microsoft \ FSharp \ 3.0 \ Runtime.NETPortable \ FSharp.Core.dll

Und in Bezug auf die FSharpAsync Klasse, dieses Thema finden Sie unter:
Referencing Asynchronous F# datatype from C#

Sie statische Methode der FSharpAsync Typ das zurückgegebene Objekt für wartet nutzen könnten.

+0

Ich habe den ersten Teil herausgefunden, aber danke für den Link, es hat geholfen –

1

Wenn Sie diesen Code aus C# anrufen, wäre es wahrscheinlich besser integrieren wie folgt aus:

static member DownloadStringAsync (url:string) = async { 
    let req = HttpWebRequest.Create(url) 
    use! resp = req.AsyncGetResponse() 
    use stream = resp.GetResponseStream() 
    let reader = new StreamReader(stream) 
    let s = reader.ReadToEnd() 
    return s 
} |> Async.StartAsTask 

Dann wird Ihr C# Projekt nicht FSharp.Core verweisen müssen, und Sie können den Standard-C# await Schlüsselwort, als ob Sie C# -Assync-Code aufrufen würden.

Verwandte Themen