4 Stimmen

f#-Code auf dem Server ausführen, auch wenn f# dort nicht installiert ist

Ist es möglich, f#-Code auf dem Server auszuführen, wenn er dort nicht installiert ist (Shared Server)? Ich meine, vielleicht kann ich hochladen und referenzieren alle notwendigen Baugruppen? f# download platz enthält zip für "other cli implementations" - vielleicht hatte jemand ähnliche Probleme?

編集 Mehr Kontext: eigentlich bin ich mit c# zu kompilieren und ausführen f#-Programm. Ich rufe also

using (CodeDomProvider provider = new Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider())
{
  cr = provider.CompileAssemblyFromSource(cp, new string[] { data.Program });
}

Jetzt ist auf meinem Rechner alles in Ordnung. Ich habe sowohl FSharp.Core.dll (Version 4) als auch FSharp.Compiler.CodeDom (Version 2) eingebunden. Alles ist lokal kopiert. Auf dem Server bekomme ich diesen Fehler:

Could not load file or assembly 'FSharp.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
  at Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider.CreateCompiler()
  at System.CodeDom.Compiler.CodeDomProvider.CreateCompilerHelper()
  at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromSource(CompilerParameters options, String[] sources)...

Bearbeiten2: Eigentlich wollte ich also kompilieren f#-Code auf einem Server, auf dem kein f# installiert ist. Hier ist, was ich zu tun hatte:

1. put FSharp.Compiler.CodeDom.dll (version 2 as there is now newer now) and FSharp.Core.dll version 2 in bin directory.
2. create new directory in bin directory and put there this:
-FSharp.Compiler.dll (version 4)
-FSharp.Core (.dll, .xml, .sigdata, .optdata) (version 4)
-Fsc.exe - f# compiler
3. From code set process' FSHARP_BIN environment variable to point to above directory:
System.Environment.SetEnvironmentVariable("FSHARP_BIN", Utils.RootFolder + @"bin\comilersstuff");

Auf diese Weise ist die Kompilierung erfolgreich und wenn Sie es ausführen möchten, müssen Sie Fsharp.Core.dll (v. 4) in das gleiche Verzeichnis wie das kompilierte F#-Programm legen.

8voto

Random Dev Punkte 50772

Natürlich - kopieren Sie einfach die FSharp-Dlls mit Ihrem Projekt oder verwenden Sie die --standalone Compiler Option. Natürlich benötigen Sie das .net (4.0/3.5/2.0 abhängig von Ihrer F#-Version) Framework auf Ihrem Server.

Am einfachsten ist es, wenn Sie für die Verweise die Einstellungen "Lokal kopieren" verwenden - die Dll wird dann neben Ihrer .exe/.dll im bin-Ordner (oder wo auch immer Sie Ihre Ausgabe ablegen) abgelegt: enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X