启动f#与Process.Start交互

所以我把代码剥离到什么不工作,这是什么:

[<EntryPoint>] let main argv = let procStart = new ProcessStartInfo(argv.[0], argv.[1..] |> String.concat " ") procStart.RedirectStandardInput <- true let proc = Process.Start(argv.[0], argv.[1..] |> String.concat " ") let y = Console.ReadLine() 0 

所以我用命令行参数“fsi”启动了程序。 fsi是f#交互式的,在我的路上,所以我假设绝对path并不重要。 程序启动正常,然后启动fsi进程,启动并closures后显示一个红色的错误秒。 我无法读取错误,所以我打印屏幕上得到一张照片,所以可能有一个错字或两个,但这里是错误的:

 unknown(1,1): error FSI1223: FSharp.Core.sigdata not found alongside FSharp.Core unknown(1,1): error FS0229: Error opening binary file 'Path\to\project\bin\debug\FSharp.Core': Exception of type 'Microsoft.FSharp.Compiler.ErrorLogger+StopProcessing was thrown. 

有一点关于不能读取f#.core程序集。

我的理论是这样的:我可以从一个普通的cmd窗口开始fsi; 我在想,当我从cmd启动fsi时,它和fsi在同一个目录下查找f#.core,但是当我用Process.Start启动它时,它出于某种原因在当前目录中查找。

我不知道我是否正确,即使是我也不知道如何解决这个问题。

我不知道为什么会发生这种情况,但是可以通过将ProcessStartInfo.WorkingDirectory属性设置为fsi本身的位置来解决此问题。

Fyoder给了我解决方案的线索,所以我接受了他的答案,但是还不够清楚。

问题是fsi和父进程正在尝试使用FSharp.Core.dll,这会导致fsi崩溃。 fsi首先在当前目录中查找找到的dll,并找到它,所以它假定它可以使用。 当在没有dll的目录中调用fsi时,它可以正常工作,因为它在fsi文件夹中找到了一个。

这应该解释为什么ProcessStartInfo.WorkingDirectory修复了这个问题。 请注意,您可以将其设置为任何没有FSharp.Core.dll的文件夹