C# 식을 동적으로 평가
이 간단한 가이드는 스크립팅 API를 사용하여 런타임에 C# 표현식을 동적으로 평가하는 방법에 관한 것입니다. 이를 위해 Roslyn Scripting API를 사용하고 학습합니다.
Roslyn 스크립팅 API를 사용하여 C# 표현식을 동적으로 평가
Roslyn은 .NET 언어용 코드 분석 API 및 컴파일러가 포함된 .NET 컴파일러용 플랫폼입니다.
- .NET 소스 코드를 실행 가능한 바이너리로 변환하는 기술입니다.
- 주요 목적은 IDE(통합 개발 환경) 및 기타 도구 개발과 관련됩니다.
- 또한 런타임 시 사용자 작성 코드 실행을 추가할 수 있는 스크립팅 API용 기능이 포함되어 있습니다.
스크립팅 API를 사용하면 .NET 애플리케이션이 C# 엔진을 시작하고 호스트에서 제공하는 개체에 대해 코드 조각을 실행할 수 있습니다. Roslyn 스크립팅 API는 다음 용도로 사용할 수 있습니다.
- C# 식 평가용.
- 일부 참조를 추가하거나 런타임에 라이브러리를 가져오기 위해.
- 스크립트 매개변수화용.
- 스크립트를 여러 번 실행합니다.
- 스크립트 대리자 생성을 위해.
- C# 스크립트 개발 및 분석.
스크립팅 API를 사용하여 C# 표현식을 동적으로 평가하는 단계
스크립팅을 시작하려면 먼저 C# 프로젝트에 스크립팅 API를 설치해야 합니다.
API 설치
API 설치를 위해 먼저 Visual Studio에서 새로운 Console Application을 생성합니다. 애플리케이션이 생성되고 IDE에 로드된 후 도구->NuGet 패키지 관리자->솔루션용 NuGet 패키지 관리
로 이동합니다. 다음 창이 나타납니다.
창에서 찾아보기 탭으로 이동하여 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
를 입력하면 코드가 종료됩니다.
이러한 유형의 스크립트는 많은 데스크톱 응용 프로그램의 단위 테스트에 사용됩니다.