我想在我的应用程序中添加一个F#REPL以进行实时调试。我正在查看fsi.exe
(F#Interactive)的源代码,并且有很多东西正在进行,看起来就像是在使用F#编译器内部。由于这个原因,我无法在我们的应用程序的上下文中编译相同的代码。
在某处实现F#REPL有一个很好的简单例子吗?我希望这相当容易。
答案 0 :(得分:5)
简短的回答是,F#(不幸的是)目前不提供任何用于在您的应用程序中托管F#Interactive的API。有很多人要求这样做 - 例如见SO question。
基本上你可以做两件事:
您可以修改open-source release并将fsi.exe
编译为可提供所需API的DLL库。这不是一个简单的任务--F#Interactive与编译器紧密绑定(它编译你动态输入的代码),但它应该可以将实现REPL的类型封装成你可以调用的某种类型(但是你不能只采取一些文件出来 - 您需要编译整个F#才能使其正常工作。
您可以像Visual Studio一样运行fsi.exe
作为单独的进程,并使用标准输入/输出向其发送命令。在fsi.exe
启动时加载库可以获得更大的灵活性。该库可以使用.NET Remoting连接回您的应用程序并公开一些数据。
不幸的是,这两个选项可能是你目前唯一能做的事情。
编辑 我以为我已经在某个地方回答了这个问题(也许是在电子邮件中),但是不能 找到它!感谢Mauricio找到exact duplicate(即使我的答案是重复的...... Doh!)
答案 1 :(得分:1)
我写了一系列关于在内部使用开源F#交互式可执行文件和WPF应用程序的博客文章。
代码库可在github上找到 - https://github.com/oriches/Simple.Wpf.FSharp.Repl
一系列博客文章是:
http://awkwardcoder.blogspot.co.uk/2013/12/simple-f-repl-in-wpf-part-1.html
http://awkwardcoder.blogspot.co.uk/2013/12/simple-f-repl-in-wpf-part-2.html
http://awkwardcoder.blogspot.co.uk/2013/12/simple-f-repl-in-wpf-part-3.html
最后的帖子即将推出。