即使服务器上没有安装F#,也能在服务器上运行F#代码

4

如果服务器上没有安装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#程序相同的目录中。

1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
8
当然可以-只需将FSharp-Dlls与您的项目一起复制或使用--standalone编译器选项。当然,您需要在服务器上安装.net框架(4.0 / 3.5 / 2.0取决于您的F#版本)。 第一种最简单的方法:使用“复制本地”设置引用-Dll将放置在bin文件夹中与您的.exe / .dll相邻(或任何您让输出走的地方): enter image description here

1
FSharp.Core.dll 是可再分发的,因此您可以将其与应用程序一起部署,这通常是最简单的做法。(您还可以将安装程序链接到应用程序的安装程序上,详见 http://msdn.microsoft.com/en-us/library/ee241127.aspx)。 - Brian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,