C# 式を動的に評価する
この簡単なガイドは、スクリプト API を使用して実行時に C# 式を動的に評価する方法について説明しています。 この目的のために、Roslyn Scripting API を使用して学習します。
Roslyn Scripting API を使用して C# 式を動的に評価する
Roslyn は、コード分析 API と .NET 言語用のコンパイラを備えた .NET コンパイラ用のプラットフォームです。
- .NET ソース コードを実行可能なバイナリに変換するテクノロジです。
- その主な目的は、IDE (統合開発環境) およびその他のツール開発に関連しています。
- さらに、実行時にユーザーが記述したコードの実行を追加できるスクリプト API の機能が含まれています。
スクリプト API を使用すると、.NET アプリケーションで C# エンジンを起動し、ホストが提供するオブジェクトに対してコード フラグメントを実行できます。 Roslyn スクリプト API は、次の目的で使用できます。
- C# 式の評価用。
- 実行時に参照を追加したり、ライブラリをインポートしたりするため。
- スクリプトのパラメータ化用。
- スクリプトを複数回実行する場合。
- スクリプトのデリゲートの作成。
- C# スクリプトの開発と分析。
スクリプト API を使用して C# 式を動的に評価する手順
スクリプト作成を開始するには、まずスクリプト API を C# プロジェクトにインストールする必要があります。
APIのインストール
API をインストールするには、まず、Visual Studio で新しいコンソール アプリケーションを作成します。 アプリケーションを作成して IDE にロードしたら、[ツール] -> [NuGet パッケージ マネージャー] -> [ソリューションの NuGet パッケージの管理] に移動します。 次のウィンドウがポップアップします。
ウィンドウで、[参照] タブに移動し、CSharp Scripting を検索します。 次に、強調表示されたパッケージのいずれかをインストールします。
パッケージのインストール後、Program.cs
ファイルに移動します。
ライブラリ ファイルを含める
パッケージのインストール後、必要なライブラリ ファイルを次のようにコード ファイルに含める必要があります。
using Microsoft.CodeAnalysis.CSharp.Scripting;
式を評価するコードを書く
EvaluateAsync()
メソッドは、スクリプトを評価するために使用されます。 このメソッドは、評価する式を含む文字列を受け取り、その式の結果を含む文字列を返します。
これは、ライブラリで使用される唯一の関数です。
static void Main(string[] args) {
Console.WriteLine("Welcome to C# Scripting");
Console.WriteLine("Enter the code to run as a C# Script");
var command = Console.ReadLine();
var results = CSharpScript.EvaluateAsync(command).Result;
Console.WriteLine(results);
}
上記のコード セグメントでは、式をユーザーからの入力として受け取り、それを EvaluateAsync()
メソッドに渡しました。 このメソッドは結果を result
変数に返し、画面に出力します。
これにより、次の出力が得られます。
ユーザーが exit
を入力して出力を表示するまで、プログラムが入力として式を要求し続けるように、コードを変更できます。 このために、while
ループを使用し、そのループで入力を取得します。
この実装のコード セグメントを見てみましょう。
static void Main(string[] args) {
Console.WriteLine("Welcome to C# Scripting");
Console.WriteLine("Enter the code to run as a C# Script");
var command = Console.ReadLine();
while (command.ToString() != "exit") {
var results = CSharpScript.EvaluateAsync(command).Result;
Console.WriteLine(results);
command = Console.ReadLine();
}
}
上記の出力ウィンドウから、プログラムが入力を受け取り、自発的に出力を行うことがわかります。 ユーザーが exit
に入ると、コードを終了します。
このような種類のスクリプトは、多くのデスクトップ アプリケーションの単体テストに使用されます。