fsi.exe程序集:任何人都知道如何嵌入它?

时间:2011-01-09 01:26:27

标签: .net f# assemblies embed scripting-language

长期读者,第一个问题。 fsi.exe是一个.NET可执行文件,因此包含自己的程序集,其中包含所有美妙的方法以及fsi用于执行F#脚本的内容。

查看.NET Reflector中的程序集(选择你的类,但Shell是最好的例子)显示了一堆看起来像装饰C ++函数的垃圾*名称(例如,来自Dependency Walker)。顺便提一下,F#程序集以相同的方式编译,有很多垃圾*名称,这让我觉得fsi.exe是用F#编写的,也许是作为可用性证明?

无论如何,这是我的问题:有没有人深入研究fsi.exe并想出如何将其嵌入到.NET应用程序中?因为我想使用F#作为脚本语言,但程序编译为(惊喜)程序,脚本必须由fsi.exe执行,这在我的域中是不可接受的(我需要一个持久的VM)。我不希望有关使用fsi.exe的操作指南,但我很想知道是否有人玩过它,如果有的话,你发现了它是如何工作的?

感谢您的时间。

*随便看一眼垃圾。显然,出于特殊原因,它们会以特殊方式格式化。

2 个答案:

答案 0 :(得分:6)

据我所知,fsi.exe没有公开任何可用于将其嵌入应用程序的API(例如,实现脚本)。我认为基本上有两种选择:

  • 如果要直接使用现有的fsi.exe,唯一的方法是使用.NET Process类启动它并以某种方式与之通信。这应该是可行的 - 您可以使用标准输入向流程发送命令。要读回输出,可以使用标准输出,但这只会提供有限的信息。可能使用.NET Remoting在fsi.exe和您的应用程序之间进行通信(例如,在FSI的脚本上下文中加载的对象将通过远程处理向您的应用程序发送信息)。

  • 另一种方法是使用F#的open-source release并修改fsi.exe以公开API所需的所有信息。这需要付出更多努力才能理解fsi.exe的工作原理,但它应该是可行的。你可能不需要那么多的补充 - 由FSI维护的状态包含诸如全局变量之类的东西。

关于许可证 - 您可能无法使用随Visual Studio分发的fsi.exe。我不确定CTP版本附带的fsi.exe。从源代码编译它(可用here)绝对没问题(因为它有开源版本)。

答案 1 :(得分:1)