2012-01-09 2 views
3

私は現在いくつかのコードを書いており、アプリケーションからC#コードを実行することが可能かどうかは疑問です。私はあなたにアイデアを与えます、私は、ユーザーにテキストボックスを与え、コードを入力して行こうとしていると言いましょう。彼らは果物のリストを求めて、各果物を通ってそれを出力します。例:アプリケーション内でC#を解析/実行できる方法はありますか?スクリプトとほとんど同じですか?

var fruitList = getFruit(); 
foreach(var fruit in fruitList) 
{ 
    print(fruit.Name); 
} 

私は、パーサーは、私はC#で書かれてきた方法にgetFruitを()タイアップすることができるはずです、これを通過し、fruitListにフルーツオブジェクトのリストを割り当てることができるようにしたいと思いますコード。同じことが印刷物にも当てはまります。これは、これをテキストボックスに出力するために書いた印刷機能と同じにする必要があります。

今私はC#がスクリプトではなく、コンパイルされていると知っていますが、私はグーグルで多くのことをしていますが、実際には何も見つかりません。私にとって唯一の選択肢は、少し楽しいと思う小さな言語パーサを自分で書くことですが、これまでにやったことは難しいことです。ですから、これは私が長年に渡る前にいくつかの解決策が存在するかどうかを確認するための予備チェックです。

私の仲間のプログラマー、私を助けることができるかもしれないことは何か知っていますか?

問題がなければ、このアドバイス、アドバイス、このhttp://blogs.msdn.com/b/ericwhite/archive/2010/06/29/writing-a-recursive-descent-parser-using-c-and-linq.aspxなどの記事へのリンクか解決方法など、フィードバックすべてに感謝します。

よろしく、
アダム

編集:私は、実施例を得るために管理しています。私がテストアプリケーションに他のコードを貼り付けたので、このコードはちょっと面倒ですが、動作します。基本的には、コードをDLLにコンパイルした後、DLLをロードし、型を見つけ、メソッドを見つけて呼び出します。あまりにも速いですね!完全なコードは以下の通りですので、私はあなたをスパムしたくない:

http://imdsm.blogspot.com/2012/01/compile-c-into-assembly-then-load-it.html

は、ここに掲載皆に感謝します。あなたはちょうど私に混乱の日を救った!

答えて

3

あなたはこのスクリーンショットのhereのように意味ですか?

このソフトウェアでは、HeuristicLabを使用して、カスタムメイドアルゴリズムで入力した場所で入力したコードを実行する演算子グラフにProgrammableOperatorを追加できます。

System.CodeDom名前空間では、コードを動的にコンパイルするために必要なものすべてがあります。コンパイルからアセンブリを作成し、アセンブリのタイプを取得してコードを実行することができます。

1

あなたはCSharpCodeProvider

を使用するかは、スクリプト言語を使用して、アプリケーションで をインタプリタを実行できる例IronRuby

+0

コードの残りの部分を生成してコンパイルに追加しない限り、それが正しい解決策であるとは必ずしも分かりませんが、それでも実行時間について心配しています。しかし、リンクのおかげで! –

+1

CSharpCodeProviderは非常に高速になります。これは、コンパイルのコストが1回しか発生しないためです。一度ロードされると、IronRubyもうまくいくはずですが、それはスクリプト環境全体です。これらの言語のスクリプトの通常のランタイムを取得します。 –

1

Roslynが助けることができるかどうか見てください、それはCTPの状態ではまだです。

+0

ありがとう、私はリストの一番下のどこかでこれを見ましたが、それが正しいかどうかは分かりませんでした。私は見て、それがあるかどうか見ていきます。 –

+1

@AdamKDean:RoslynはC#とVBのスクリプトシナリオを手助けすることができますが、まだプライムタイムの準備が整っていません。 Billは10月に計画についての予備的な文書をここに掲載しました:http://social.msdn.microsoft.com/Forums/en-US/roslyn/thread/06e3582e-386d-4a1c-964b-29529e497e72。あなたがそれを評価し、この分野で直面している問題の種類に関するフィードバックをお寄せいただきたい場合は、Billの投稿にフィードバックをお寄せください。ありがとう! –

+0

@EricLippertゲストコード(編集可能)は、ホストコードからメソッド/アクセス変数を呼び出すことができ、それ自身のクラスであるかのように機能する必要があります。 コードをライブラリにコンパイルし、それを動的にロードして汎用メソッドを呼び出す方法はありますか?例:http://pastebin.com/ATP6ri6R テンプレートにコードを挿入し、コンパイルしてGuestオブジェクトにすることができれば、それは素晴らしいことです。 可能ですか? –

1

私は、マイクロソフトの新しいコンパイラプロジェクトがあなたが探しているものだと思います。これでC#を実際にスクリプトとして実行することができます。

Project "Roslyn"

+0

ありがとう、私は今見ている。乾杯 –

+1

そして、ところでstackoverflowへようこそ!あなたが答えが好きなら、あなたはそれをアップヴォートして、その人にクレジット(評判)を与えることができます。それがあなたの質問に対する答えであれば、あなたはそれを正しい答えであると他の人に知らせるためにそれを回答として受け入れ、回答の評判を与えた人に与えることもできます。 – SynerCoder

+0

ありがとう@SynerCoder、私は長年lurkerされている、stackoverflow私のカウントを失ったので、何度も私の肌を保存しています。すべてと同じように、コミュニティに参加してコンテンツに追加するのは私のターンになりました。歓迎ありがとう! –

関連する問題