如果服务器上没有安装f#,是否可以在服务器上运行f#代码(共享服务器)?我的意思是,我可以上传并引用所有必要的程序集吗?f#下载位置包含“其他cli实现”的zip文件-也许有人遇到过类似的问题?
编辑更多上下文:实际上,我正在使用c#编译和运行f#程序。所以我调用
using (CodeDomProvider provider = new Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider())
{
cr = provider.CompileAssemblyFromSource(cp, new string[] { data.Program });
}
现在在我的机器上一切都好。我已经包含了FSharp.Core.dll(版本4)以及FSharp.Compiler.CodeDom(版本2)。所有内容都被本地复制。但是在服务器上我遇到了这个错误:
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)...
编辑2: 实际上,我想在没有安装f#的服务器上编译f#代码。以下是我需要做的:
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");
这样编译就成功了,如果你想运行它,你需要将Fsharp.Core.dll(版本为4)放在编译后的F#程序相同的目录中。
FSharp.Core.dll
是可再分发的,因此您可以将其与应用程序一起部署,这通常是最简单的做法。(您还可以将安装程序链接到应用程序的安装程序上,详见 http://msdn.microsoft.com/en-us/library/ee241127.aspx)。 - Brian