2011-01-09 5 views
6

長文リーダー、非常に最初の質問です。 fsi.exeは.NET実行可能ファイルなので、独自のアセンブリが含まれていて、すべての有益なメソッドとそれ以外のfsiがF#スクリプトを実行するために使用します。fsi.exeアセンブリ:それを埋め込む方法は誰でも知っていますか?

.NET Reflector(クラスを選んでくださいが、Shellが最も良い例です)のアセンブリを見ると、装飾されたC++関数のように見えるゴミ*の名前が表示されます(例:Dependency Walkerから)。ちなみに、ちょっとだけ言えば、F#アセンブリは同じようにコンパイルされていますが、Fsi.exeはFsi.exeがF#で書かれていると思います。

とにかく、ここに私の質問があります:fsi.exeを掘り下げ、.NETアプリケーションに埋め込む方法を見つけましたか?私はスクリプト言語としてF#を使用したいが、プログラムは(驚き)プログラムにコンパイルされ、スクリプトはfsi.exeによって実行されなければならない。これは私のドメインでは受け入れられない(永続的なVMが必要)。私はfsi.exeの使い方についてのハウツーガイドを期待していませんが、誰かがそれを試しているかどうかを知りたいと思っています。

お時間をいただきありがとうございます。

*カジュアルなごみのごみ。明らかに、彼らはフードの下にある特定の理由のために、この特定の方法でフォーマットされています。

+1

だから基本的には、[evalの](http://en.wikipedia.org/wiki/Eval)をしたいですか? –

+1

私は疑問に思っていますが、F#のライセンスは最初にfsiを組み込むことを許可していますか? – Juliet

+0

@Juliet:なぜライセンス問題になるのですか? – leppie

答えて

6

私が知る限り、fsi.exeは、アプリケーションに埋め込むために使用できるAPIを公開していません(スクリプト作成を実装するなど)。

  • あなたが直接fsi.exeを既存の使用したい場合は、唯一の方法は、.NET Processクラスを使用して、それを起動し、何とかそれと通信することです:私は2つのオプションが基本的にあると思います。これは実行可能でなければなりません。標準入力を使用してプロセスにコマンドを送ることができます。出力を読み戻すには、標準出力を使用できますが、これは限られた情報しか提供しません。 .NET Remotingを使用して、fsi.exeとアプリケーション(たとえば、FSIのスクリプトコンテキストに読み込まれたオブジェクトがRemotingを介してアプリケーションに情報を送信するなど)と通信することはおそらく可能です。

  • もう1つの方法は、F#のopen-source releaseを使用して、fsi.exeを変更して、APIとして必要なすべての情報を公開することです。これは、どのようにしてfsi.exeが動作するかを理解するためにより多くの努力が必要ですが、実行可能でなければなりません。多くの追加は必要ありません.FSIによって維持される状態には、グローバル変数のようなものが含まれています。

ライセンスに関しては、おそらくVisual Studioにはfsi.exeを配布することはできません。 CTPリリースに付属するfsi.exeについてはわかりません。ソースからのコンパイル(here)は、(オープンソースのリリースがあるため)間違いなく良いでしょう。

+0

入力のおかげで、トマス。F#のパワーパックを見てから、本当に皮肉なF#で書かれていました。私は情報源の上をポーリングする過程にある。それは私が適応するにはあまりにも進んでいるかもしれませんが、それにもかかわらず面白いです。私は総合的な対応のためにあなたを評価したいですが、私はそれのための担当者を持っていません。 – Tom

+0

何とか別のAppDomainに埋め込むことは可能ですか?そうすれば、別の.netプロセスのオーバーヘッドがなくなり、おそらくアーキテクチャ的に管理しやすくなります。 –

+0

@ashley - 残念ながら、現時点では別のプロセスとして開始する必要があります。 –

関連する問題