2016-07-06 45 views
3

如何創建可以從C#Xamarin Android項目調用的F#PCL?如何從一個Xamarin Android C#項目中調用返回字符串選項的PCL中的F#方法?

東西簡單,像這樣在PCL:

namespace FSharpPCL2 

type Class1() = 
    member this.X (s: string option) = 
     s 
     |> Option.map (fun t -> t + "stuff") 

嘗試從C#Xamarin的Android項目調用它,你會得到一個編譯錯誤是這樣的:

MainActivity。 cs(26,41):錯誤CS0012:類型 Microsoft.FSharp.Core.FSharpOption 1'在沒有引用的 程序集中定義。考慮增加一個參考 裝配`FSharp.Core,版本= 3.78.3.1,文化=中立, 公鑰= b03f5f7f11d50a3a」

但它不是我清楚如何進行實際管理,包括正確的FSharp.Core在C#項目中。

回答

2

你應該看看FSharp.Core guidelines,它解釋了你在這些場景中的選項。

在你的情況下,你可以在你的C#-xamarin項目中添加一個到FSharp.Core nuget package的包引用。 FSharp.Core, Version=3.78.3.1F# 3.1/Profile 78。您可以通過查看參考> FSharp.Core>屬性中的版本/路徑來確保所需的版本被引用。如果沒有,您可以編輯csproj並將路徑更改爲適當的版本。

另一種方法是直接添加到FSharp.Core參考隨Visual/Xamarin工作室要麼 %PROGRAMFILES(X86)%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.3.1\FSharp.Core.dll/Library/Frameworks/Mono.framework/Versions/4.4.1/lib/mono/Reference Assemblies/Microsoft/FSharp/.NETCore/3.78.3.1/FSharp.Core.dll

+1

原來,添加的NuGet到C#項目不工作 - 你只得到我正在問的錯誤。 –

+1

如果可以將PCL版本的FSharp.Core添加到C#項目(而不是您認爲正確的項目),那麼您幾乎肯定不會想要這樣做,包含的PCL F#項目(如果您試圖包含使用printfn的F#項目,會發生什麼情況,例如,如果您的最終項目試圖使用PCL FSharp.Core) –

+0

我編輯了我的答案並添加了一個替代方案,使用安裝了VS/XS而不是nuget包的FSharp.Core程序集。 關於nuget軟件包,您是否添加了正確版本的軟件包? 3.78.3.1表示F#3.1。 最後是的,有很多項目引用不同的FSharp.Core會打破東西;但最終可以通過[綁定重定向](https://fsharp.github.io/2015/04/18/fsharp-core-notes.html#use-binding-redirects-for-applications)將其修復爲最高版本,在實際運行的應用程序上。 FSharp.Core實現是二進制兼容的。 – krontogiannis

相關問題