2012-03-30 3 views
2

私はロザリンと遊ぶだけですが、次のようにする方法は不明です。csファイルからスクリプトをロードし、ホストメソッド、プロパティなどにアクセスしますか?

このシンプルに保つために、私はそう

public void DisplayMessage(string message) 
{ 
    MessageBox.Show(message); 
} 

のようなメソッドを持っているホストプログラムは、私はその後、MyScript.csxというスクリプトファイルがあり、その後、どこかに、スクリプト内の

のようなものを持つことができていると言うことができます
void Main() 
{ 
    Host.DisplayMessage("I am a script"); 
} 

次に、ホストにファイルをロードして実行させます。

この種のことを行うことができない場合は、それを行うことができるC#に基づくスクリプトシステム/エンジンがありますか? これは要件です

  1. ホストアプリケーションはファイルからスクリプトを読み込むことができます。
  2. スクリプトファイルC#で書かれているので、
  3. スクリプトファイルは、はい、あなたはロズリンを使ってやりたいことができますホストのパブリックメソッド、プロパティなど

答えて

1

にアクセスすることができ、構文などでVS2010を使用して書き込むことができます。

まず、公開DisplayMessageメソッド(または既存のクラスを使用)を持つ公開Hostクラスを作成します。次にScriptEngineを作成し、Hostを含むアセンブリを参照として指定します。スクリプトファイルは、任意のMain()方法を必要とし、あなたが直接ホストオブジェクトのメソッドを呼び出すことはありません

var engine = new ScriptEngine(references: new[] { typeof(Host).Assembly }); 
engine.ExecuteFile("MyScript.csx", new Host()); 

:その後、あなたは別のパラメータとしてHostオブジェクトと、あなたのファイルにExecuteFile()を呼び出すことができます

DisplayMessage("I am a script"); 
+0

クール、私はそれを試してみましょう – Gaz83

+0

Ok @svickただDisplayMessageを書く( "私はスクリプトです");動作しないので、実際にホストのプロパティに実際にどのようにアクセスしますか? は私が#R追加してみました:スクリプトの先頭に、「C \ MyScriptTest.exe」(スクリプトを実行アセンブリ)と、以下のTestApp.MainWindow.DisplayMessageを(「私はスクリプトだ」)を行います。しかし、私は "DisplayMessageの定義が含まれていません"エラー – Gaz83

+0

あなたは本当にどのような方法でそれを参照する必要はありません、あなたは私が書いたようにそれを呼び出すことができる必要があります。 'Host'のインスタンスを' ExecuteFile() 'メソッドに渡していて、呼び出したいメソッドが' public'ですか? – svick

2

あなたが求めているもののほとんどをカバーするIntroduction to the Roslyn scripting APIを書きました。 ScriptEngineタイプには、あなたがしようとしているものに役立つExecuteFileメソッドもあります。

免責事項:私はRoslynプロジェクトでMicrosoftに勤務しています。