C# 式を動的に評価する

Naila Saad Siddiqui 2024年2月15日
  1. Roslyn Scripting API を使用して C# 式を動的に評価する
  2. スクリプト API を使用して C# 式を動的に評価する手順
C# 式を動的に評価する

この簡単なガイドは、スクリプト API を使用して実行時に C# 式を動的に評価する方法について説明しています。 この目的のために、Roslyn Scripting API を使用して学習します。

Roslyn Scripting API を使用して C# 式を動的に評価する

Roslyn は、コード分析 API と .NET 言語用のコンパイラを備えた .NET コンパイラ用のプラットフォームです。

  1. .NET ソース コードを実行可能なバイナリに変換するテクノロジです。
  2. その主な目的は、IDE (統合開発環境) およびその他のツール開発に関連しています。
  3. さらに、実行時にユーザーが記述したコードの実行を追加できるスクリプト API の機能が含まれています。

スクリプト API を使用すると、.NET アプリケーションで C# エンジンを起動し、ホストが提供するオブジェクトに対してコード フラグメントを実行できます。 Roslyn スクリプト API は、次の目的で使用できます。

  1. C# 式の評価用。
  2. 実行時に参照を追加したり、ライブラリをインポートしたりするため。
  3. スクリプトのパラメータ化用。
  4. スクリプトを複数回実行する場合。
  5. スクリプトのデリゲートの作成。
  6. C# スクリプトの開発と分析。

スクリプト API を使用して C# 式を動的に評価する手順

スクリプト作成を開始するには、まずスクリプト API を C# プロジェクトにインストールする必要があります。

APIのインストール

API をインストールするには、まず、Visual Studio で新しいコンソール アプリケーションを作成します。 アプリケーションを作成して IDE にロードしたら、[ツール] -> [NuGet パッケージ マネージャー] -> [ソリューションの NuGet パッケージの管理] に移動します。 次のウィンドウがポップアップします。

APIインストール手順1

ウィンドウで、[参照] タブに移動し、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 に入ると、コードを終了します。

このような種類のスクリプトは、多くのデスクトップ アプリケーションの単体テストに使用されます。