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.