2015-03-27 17 views
5

Ich habe ein F # -Programm, das ich in VS2013 gebaut habe. Ich beabsichtige, dies auf einem Windows 2008 R2 Server mit installiertem .NET Framework 4.5 zu implementieren. Jetzt, wenn ich das Programm in Visual Studio erstelle, erstellt es eine Exe im Verzeichnis debug/bin (MyProgram.exe). Muss ich eine Kopie von fharp.core.dll mit der EXE einbinden? Oder wird der Buildprozess automatisch die erforderlichen Abhängigkeits-DLLs (fsharp.core, fsharp.data, fsharp.data.TypeProviders) kompilieren? Die meisten Recherchen, nach denen ich online suchen kann, scheinen VS2010 zu betrachten und ich benutze derzeit keine fsc, exe.Bereitstellen von F # exe

Vielen Dank für einen Einblick zur Verfügung gestellt.

+1

Sie müssen alle Dateien im Ordner bin/debug zum Bereitstellungsverzeichnis kopieren. Die Seitennotiz F # wird auf MSIL kompiliert, es gibt keinen Unterschied bei der Bereitstellung einer .Net-Anwendung, die in F # geschrieben ist, und einer in C geschriebenen # – theDarse

+1

@theDarse Das ist nicht ganz korrekt. F # -Code verwendet Typen und Funktionen, die in FSharp.Core definiert sind (Listen, Optionen usw.), und da FSharp.Core nicht Teil der BCL ist, müssen Sie sicherstellen, dass diese Assembly * irgendwie * für das Programm verfügbar ist hängt von diesen Typen ab. –

Antwort

5

Sie können FSharp.Core.dll zusammen mit dem .exe kopieren.

Wenn F # bereits auf dem Server installiert ist, benötigen Sie es möglicherweise nicht, aber es muss die richtige Version von F # sein.

Andernfalls können Sie mithilfe der F # -Lizenz FSharp.Core.dll zusammen mit Ihren eigenen Binärdateien bereitstellen.

Es gibt auch die 'offizielle' FSharp.Core NuGet package, wenn das mehr nach Ihren Wünschen ist.

+0

Ich habe die Datei fsharp.core.dll in das gleiche Verzeichnis kopiert, in dem MyProgram.exe ist. Wenn es startet, bekomme ich einen unbehandelten Ausnahmefehler "Fehlende Methode Eception: Microsoft.Fsharp.Control.FsharpAsync'1 FSharp.Data.Runtime.IO.asyncReadTextAtRuntime ..." Es läuft perfekt in VS2013 . Ich verstehe nicht, warum das nicht funktioniert. Vielen Dank für Ihre Hilfe – RT1138

+1

Ich kann nicht speziell sagen, was das Problem ist, aber diese * MissingMethodExceptions * sind immer (IME) wegen nicht übereinstimmender Assemblyversion. Sie müssen sicherstellen, dass die Version von FSharp.Core.dll im Prüfpfad des Programms mit der Version identisch ist, für die sie kompiliert wurde. –

+0

Möglicherweise können Sie [Fuslogvw] (https://msdn.microsoft.com/en-us/library/e74a18c4.aspx) verwenden, um das Problem zu beheben ... –

7

Sie können die Compiler-Option --standalone verwenden, um die FSharp.Core.dll (F # Laufzeit) und alle davon abhängigen Referenz-Assemblys (d. H. Alle anderen F # Assemblys) statisch zu verknüpfen.

+0

Wo zum Teufel würde ich diese Option in einem VS F # -Projekt hinzufügen? Scheinbar nichts Relevantes im Projekt -> Optionen -> Build – dudeNumber4

+0

Im Testfeld "andere Flags" im Projekt -> Eigenschaften -> Build – rasmusm