2

Roslyn で遊んでいるだけですが、次のことを行う方法がわかりません。

これを簡単にするために、次のようなメソッドを持つホストプログラムがあるとしましょう

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

次に、MyScript.csx というスクリプト ファイルを作成し、スクリプトのどこかに次のようなファイルを作成できますか

void Main()
{
   Host.DisplayMessage("I am a script");
}

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

この種のことができない場合、それを実行できる c# ベースのスクリプト システム/エンジンはありますか? これらは要件です

  1. ホスト アプリケーションは、ファイルからスクリプトをロードできます。
  2. スクリプト ファイルは C# で記述されているため、VS2010 を使用して構文などを記述できます。
  3. スクリプト ファイルは、ホストのパブリック メソッド、プロパティなどにアクセスできます
4

2 に答える 2

3

Roslyn スクリプト API の概要を書きました。これは、あなたが求めていることのほとんどをカバーしています。このScriptEngine型には、ExecuteFile実行しようとしていることに役立つメソッドもあります。

免責事項: 私は Microsoft の Roslyn プロジェクトで働いています。

于 2012-04-11T21:20:55.780 に答える
1

はい、Roslyn を使用して、やりたいことができます。

まず、Hostパブリック メソッドを持つパブリック クラスを作成しますDisplayMessage(または既存のクラスを使用します)。次にScriptEngine、 を含むアセンブリをHost参照として指定して を作成します。その後、オブジェクトを別のパラメーターとして使用ExecuteFile()して、ファイルを呼び出すことができます。Host

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

スクリプト ファイルにはメソッドは必要なくMain()、ホスト オブジェクトでメソッドを直接呼び出します。

DisplayMessage("I am a script");
于 2012-03-30T19:18:59.727 に答える