Evaluar expresiones de C# dinámicamente

Naila Saad Siddiqui 15 febrero 2024
  1. Utilice la API de secuencias de comandos de Roslyn para evaluar expresiones de C# dinámicamente
  2. Pasos para usar la API de secuencias de comandos para evaluar expresiones de C# dinámicamente
Evaluar expresiones de C# dinámicamente

Esta guía trivial trata sobre el uso de la API de secuencias de comandos para evaluar las expresiones de C# dinámicamente en tiempo de ejecución. Para este propósito, usaremos y aprenderemos la API de secuencias de comandos de Roslyn.

Utilice la API de secuencias de comandos de Roslyn para evaluar expresiones de C# dinámicamente

Roslyn es una plataforma para compiladores .NET con API de análisis de código y compiladores para lenguajes .NET.

  1. Es una pieza de tecnología que convierte el código fuente de .NET en un binario ejecutable.
  2. Su objetivo principal se relaciona con los IDE (Entornos de desarrollo integrados) y el desarrollo de otras herramientas.
  3. Además, incluye funciones para la API de secuencias de comandos que le permiten agregar la ejecución de código escrito por el usuario en tiempo de ejecución.

Las API de secuencias de comandos permiten que las aplicaciones .NET inicien un motor C# y ejecuten fragmentos de código en objetos proporcionados por el host. La API de secuencias de comandos de Roslyn se puede utilizar para los siguientes propósitos:

  1. Para la evaluación de expresiones C#.
  2. Para agregar algunas referencias o importar cualquier biblioteca en tiempo de ejecución.
  3. Para parametrizar un script.
  4. Para ejecutar un script varias veces.
  5. Para la creación de un delegado del script.
  6. Desarrollo y análisis de un script C#.

Pasos para usar la API de secuencias de comandos para evaluar expresiones de C# dinámicamente

Para comenzar con las secuencias de comandos, primero debe instalar la API de secuencias de comandos en su proyecto de C#.

Instalación de API

Para la instalación de la API, primero, cree una nueva aplicación de consola en Visual Studio. Después de crear y cargar la aplicación en el IDE, vaya a Herramientas->Administrador de paquetes NuGet->Administrar paquetes NuGet para la solución. Aparecerá la siguiente ventana:

paso 1 para la instalación de la API

En la ventana, diríjase a la pestaña Examinar y busque CSharp Scripting. Luego instale cualquiera de los paquetes resaltados.

Después de la instalación del paquete, diríjase a su archivo Program.cs.

Incluir los archivos de la biblioteca

Después de la instalación del paquete, debe incluir los archivos de biblioteca requeridos en su archivo de código de esta manera:

using Microsoft.CodeAnalysis.CSharp.Scripting;

Escriba el código para evaluar la expresión

El método EvaluateAsync() se utiliza para evaluar el script. Este método toma una cadena que contiene la expresión a evaluar y devuelve una cadena que contiene el resultado de esa expresión.

Esta es la única función que se utiliza en la biblioteca.

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);
}

En el segmento de código anterior, tomamos la expresión como entrada del usuario y luego la pasamos al método EvaluateAsync(). Este método devuelve el resultado en la variable resultado, impresa en pantalla.

Esto dará el siguiente resultado:

salida de la expresión evaluación

Podemos modificar el código para que el programa siga pidiendo las expresiones como entrada hasta que el usuario ingrese “salir” y muestre la salida. Para esto, usaremos un bucle while y tomaremos la entrada en ese bucle.

Veamos el segmento de código para esta implementación:

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();
  }
}

salida de la expresión de evaluación

Puede ver en la ventana de salida de arriba que el programa toma entradas y da salidas espontáneamente. Cuando el usuario ingresa la salida, sale del código.

Estos tipos de scripts se utilizan para pruebas unitarias de muchas aplicaciones de escritorio.