C# 식을 동적으로 평가

Naila Saad Siddiqui 2024년2월15일
  1. Roslyn 스크립팅 API를 사용하여 C# 표현식을 동적으로 평가
  2. 스크립팅 API를 사용하여 C# 표현식을 동적으로 평가하는 단계
C# 식을 동적으로 평가

이 간단한 가이드는 스크립팅 API를 사용하여 런타임에 C# 표현식을 동적으로 평가하는 방법에 관한 것입니다. 이를 위해 Roslyn Scripting API를 사용하고 학습합니다.

Roslyn 스크립팅 API를 사용하여 C# 표현식을 동적으로 평가

Roslyn은 .NET 언어용 코드 분석 API 및 컴파일러가 포함된 .NET 컴파일러용 플랫폼입니다.

  1. .NET 소스 코드를 실행 가능한 바이너리로 변환하는 기술입니다.
  2. 주요 목적은 IDE(통합 개발 환경) 및 기타 도구 개발과 관련됩니다.
  3. 또한 런타임 시 사용자 작성 코드 실행을 추가할 수 있는 스크립팅 API용 기능이 포함되어 있습니다.

스크립팅 API를 사용하면 .NET 애플리케이션이 C# 엔진을 시작하고 호스트에서 제공하는 개체에 대해 코드 조각을 실행할 수 있습니다. Roslyn 스크립팅 API는 다음 용도로 사용할 수 있습니다.

  1. C# 식 평가용.
  2. 일부 참조를 추가하거나 런타임에 라이브러리를 가져오기 위해.
  3. 스크립트 매개변수화용.
  4. 스크립트를 여러 번 실행합니다.
  5. 스크립트 대리자 생성을 위해.
  6. C# 스크립트 개발 및 분석.

스크립팅 API를 사용하여 C# 표현식을 동적으로 평가하는 단계

스크립팅을 시작하려면 먼저 C# 프로젝트에 스크립팅 API를 설치해야 합니다.

API 설치

API 설치를 위해 먼저 Visual Studio에서 새로운 Console Application을 생성합니다. 애플리케이션이 생성되고 IDE에 로드된 후 도구->NuGet 패키지 관리자->솔루션용 NuGet 패키지 관리로 이동합니다. 다음 창이 나타납니다.

API 설치 1단계

창에서 찾아보기 탭으로 이동하여 CSharp 스크립팅을 검색합니다. 그런 다음 강조 표시된 패키지를 설치합니다.

패키지 설치 후 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를 입력하면 코드가 종료됩니다.

이러한 유형의 스크립트는 많은 데스크톱 응용 프로그램의 단위 테스트에 사용됩니다.