0

新しいプロセスを生成し、次のように F# コンパイラを呼び出します。

var exeName = args[0];
var commandLine = args[1];
using (var process = new Process())
{
    process.StartInfo = new ProcessStartInfo(exeName, commandLine);
    process.StartInfo.UseShellExecute = true;
    process.StartInfo.LoadUserProfile = true;

    process.Start();
}

渡す引数は、fsc.exe へのパスと、ビルドするコードの引数です。
結果は例外です:

Unhandled Exception: System.ArgumentException: chop_extension
   at Internal.Utilities.Filename.chop_extension(String s)
   at Microsoft.FSharp.Compiler.Build.TcConfigBuilder.DecideNames(FSharpList`1 sourceFiles)
   at Microsoft.FSharp.Compiler.Driver.main1(String[] argv)
   at Microsoft.FSharp.Compiler.ErrorLogger.ErrorLoggerExtensions.ReraiseIfWatsonable(Exception exn)
   at Microsoft.FSharp.Compiler.ErrorLogger.ErrorLoggerExtensions.ErrorLogger.ErrorRecovery(ErrorLogger x, Exception exn, range m)
   at Microsoft.FSharp.Compiler.ErrorLogger.errorRecovery(Exception exn, range m)
   at Microsoft.FSharp.Compiler.Driver.main1(String[] argv)
   at Microsoft.FSharp.Compiler.Driver.main(String[] argv)
   at Microsoft.FSharp.Compiler.CommandLineMain.main(String[] argv)
   at Microsoft.FSharp.Compiler.ErrorLogger.ErrorLoggerExtensions.ReraiseIfWatsonable(Exception exn)
   at Microsoft.FSharp.Compiler.ErrorLogger.ErrorLoggerExtensions.ErrorLogger.ErrorRecovery(ErrorLogger x, Exception exn, range m)
   at Microsoft.FSharp.Compiler.ErrorLogger.errorRecovery(Exception exn, range m)
   at Microsoft.FSharp.Compiler.CommandLineMain.main(String[] argv)

ただし、コマンドプロンプトから同じコマンドと引数を実行すると、エラーなしでコンパイルされます

これの原因は何ですか?

4

1 に答える 1

2

コンパイラに渡すパラメータを知らずに特定の答えを出すことは困難です。エラーは、おそらくコマンド ライン パラメータの形式が正しくないことが原因です。

Processただし、C# から F# コンパイラを呼び出す場合は、クラスを使用して明示的に行う必要はありません。F# PowerPackで使用できる F# CodeDom プロバイダーを使用できます。パラメーターのフォーマットを処理します (また、非常に微妙な F# コンパイラーの検索も行います)。

F# から呼び出す方法を示す簡単な例を次に示します (C# から呼び出す場合も同様です)。

#r "FSharp.Compiler.CodeDom.dll"

open System.CodeDom.Compiler
open Microsoft.FSharp.Compiler.CodeDom

let provider = new FSharpCodeProvider()
let parameters = CompilerParameters()
provider.CompileAssemblyFromFile(parameters, [| "C:...file.fsx" |])
于 2012-05-15T16:17:12.540 に答える