2011-08-18 29 views
4

が、それはそれはそこ(共有サーバー)インストールされていない場合は、サーバー上のF#のコードを実行することが可能であるが設置されていない場合でも?おそらく、必要なアセンブリをすべてアップロードして参照することができますか? f# download placeには「他のCLI実装」用のzipが含まれています。実行F#コードは、F#は

詳細:実際には、私はf#プログラムをコンパイルして実行するためにC#を使用しています。だから私は電話する

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)... 

EDIT2: だから、実際に私がインストールされていないの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(V 4を。)入れていたと思います同じディレクトリにコンパイルされたF#プログラムとして。当然の

答えて

8

- ちょうどあなたのプロジェクトにFSharp-DLLをコピーまたは--standaloneコンパイラオプションを使用します。もちろん、あなたのサーバー上に.net(あなたのF#-versionに依存する4.0/3.5/2.0)フレームワークが必要です。

最初に行う方法最も簡単な:参考のために、「ローカルコピー」の設定を使用する - DLLがbinフォルダに/ .dllはあなたの.exeファイルの横に置かれます(または、あなたの出力を手放すwhereever): enter image description here

+1

'FSharp.Core.dll'は再配布可能ですので、あなただけのアプリと一緒にそれを展開することができ、これは通常、最も簡単な方法です。 (インストーラをあなたのアプリのインストーラに連鎖させることもできます。http://msdn.microsoft.com/en-us/library/ee241127.aspxを参照してください)。 – Brian

+1

最初の質問の回答 – ren