- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
长期读者,第一个问题。 fsi.exe 是一个 .NET 可执行文件,因此包含它自己的程序集,其中包含所有美味的方法以及 fsi 用来执行 F# 脚本的东西。
查看 .NET Reflector 中的程序集(选择您的类,但 Shell 是最好的例子)会发现一堆垃圾*名称,它们看起来像装饰的 C++ 函数(例如,来自 Dependency Walker)。顺便说一句,有点离题的是,F# 程序集的编译方式大致相同,有很多垃圾*名称,这让我认为 fsi.exe 是用 F# 编写的,也许是为了证明可用性?
无论如何,这是我的问题:有没有人深入研究 fsi.exe 并想出如何将它嵌入到 .NET 应用程序中?因为我想使用 F# 作为脚本语言,但是程序编译为(意外)程序,并且脚本必须由 fsi.exe 执行,这在我的域中是 Not Acceptable (我需要一个持久的 VM)。我不希望有关于使用 fsi.exe 的操作指南,但我很想知道是否有人玩过它,如果有,你对它的工作原理有什么发现?
谢谢你的时间。
* 垃圾一目了然。显然,出于某种特殊原因,它们以这种特殊方式格式化。
最佳答案
据我所知,fsi.exe
不公开任何可用于将其嵌入到应用程序中的 API(例如实现脚本)。我认为基本上有两种选择:
fsi.exe
直接,唯一的方法是使用 .NET 启动它 Process
类并以某种方式与它交流。这应该是可行的 - 您可以使用标准输入向进程发送命令。要读回输出,您可以使用标准输出,但这只能提供有限的信息。可能可以使用 .NET Remoting 在 fsi.exe
之间进行通信和您的应用程序(例如,您在 FSI 脚本上下文中加载的对象将通过远程处理向您的应用程序发送信息)。 fsi.exe
将您需要的所有信息作为 API 公开。这需要更多的努力才能理解 fsi.exe
工作,但它应该是可行的。您可能不需要那么多添加 - FSI 维护的状态包含全局变量之类的内容。 fsi.exe
与 Visual Studio 一起分发。我不确定
fsi.exe
随 CTP 版本一起发布。从源代码(可用
here )编译它肯定没问题(因为它有开源版本)。
关于.net - fsi.exe 程序集 : Anyone know how to embed it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4637181/
我在桌面的“新文件夹”中有以下文件: // File location: "C:\Users\my_user_name\Desktop\New folder\AddOne.fs" // module
传入通知消息的 Android Studio logcat 显示如下 []message[]。 我复制并粘贴到 .txt 文件,它显示 FSImessagePDI 。 这种字符“FSI”和“PDI”是
我已经使用 Visual Studio Community Edition 安装了 F#,还安装了 Visual F# 4.0 Tools 当我从命令提示符运行 fsi 时抛出异常 我也尝试将 F#
我想编写一些运行一系列 F# 脚本 (.fsx) 的代码。问题是我可以拥有数百个脚本,如果我这样做: let shellExecute program args = let startInfo
例如,我错误地重新定义了ref。它取代了默认的 ref。 是否可以删除我的定义并在不重新启动的情况下恢复到原始定义? 最佳答案 let ref = Microsoft.FSharp.Core.Oper
例如,我错误地重新定义了ref。它取代了默认的 ref。 是否可以在不重启的情况下删除我的定义并恢复到原来的定义? 最佳答案 let ref = Microsoft.FSharp.Core.Opera
我读过 fsi.exe (F# Interactive) 不是严格意义上的真正“解释器”,因为它动态编译 F# 代码并显示其输出。 我的印象是“解释器”这个词适用于“动态”语言(即 JavaScrip
我有以下代码: let p = new System.Diagnostics.Process(); printfn "installing %A" "installing" p.StartInfo.F
如果我将下面的模块编译成一个dll namespace MyNs module SomeModule = do printfn "module loading" let x = 23
我在一台有 40 个内核的机器上有以下奇怪的行为:调用 System.Environment.ProcessorCount在fsi (12.0.30815.0) 和 fsianycpu (12.0.3
如何将 F# Interactive 控制台的输出限制为我自己的输出? 在我当前的设置中,fsi 在运行脚本时会写入大量信息(关于数据结构的类型和内容)。 我试过 quiet mode 没有成功。 谢
有什么方法可以检索 FSI session 中的开放命名空间和模块列表?我正在打印一个 F# 引用的表达式,我希望能够区分应该完全限定打印的模块值和不应该打印的模块值。 最佳答案 我不认为有办法做到这
我无法在F#签名文件中定义文字。 我有一个文件File.fs,如下所示: module Thingo = [] let hello = "world" 我需要为其创建一个签名文件,因此最初尝试
几天以来,我无法使用 FSharp Interactive interpreter(Alt + Enter),它给我这条消息:*未能生成 FSI,请确保它在 PATH 中* 此外,如果我运行脚本,它会
没有任何 SQLite .NET 包在 FSI 中工作,即使在 fs 项目中引用模块时也是如此。我试过 System.Data.SQLite,SQLitePCL.raw , 和 Microsoft.D
我正在 Mac OS X/mono 上使用 fsi 学习 F#,但很难知道退出和退出 shell 的命令。 退出,或者 ^D 不起作用,^C 也不起作用。停止 fsi 的命令是什么? 一般来说,在哪里
使用 FSharp.Charting 探索 F# 我原以为我会从一个简单的“hello world”开始,但它留给我的问题比代码行还多。 #load @"..\packages\FSharp.Char
FSI 能否很好地处理多模块/文件 F# 项目?考虑以下项目: 模块.fs: module Xyz let add x y = x + y 程序.fs: module Program open Xyz
我有一个现有的应用程序,我希望能够在其中拥有自己的 FSI session 。虽然不是标准的 FSI session ,但我希望能够使用来自我的应用程序的数据预先填充 FSI session 。 所以
我使用 fsharpi (fsi) 作为后台编译进程,使用 System.Diagnostics.Process 生成进程。我的 ProcessStartInfo 设置如下所示: let psi =
我是一名优秀的程序员,十分优秀!