繁体   English   中英

使用Process.Start启动f#交互式

[英]Starting f# interactive with 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#交互式的,它在我的路径上,因此我假设绝对路径无关紧要。 程序正常启动,然后启动fsi进程,该进程在显示红色错误一秒钟后启动并关闭。 我无法如此迅速地读取错误,因此我打印了屏幕以获取图片,因此可能会有一两个错字,但这是错误:

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启动它时,由于某种原因,它会在当前目录中查找。

我不知道我是否正确,即使是我也不知道该如何解决。

我不确定为什么会这样,但是您可以通过将ProcessStartInfo.WorkingDirectory属性设置为fsi本身所在的位置来解决。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM