코드를 동적으로 컴파일하고 실행하는 작업을 단순화하기 위해 SharpByte.Dynamic 패키지를 작성했습니다 . 여기에 자세히 설명 된대로 확장 메서드를 사용하여 모든 컨텍스트 개체에서 코드를 호출 할 수 있습니다 .
예를 들면
someObject.Evaluate<int>("6 / {{{0}}}", 3))
3을 반환합니다.
someObject.Evaluate("this.ToString()"))
컨텍스트 객체의 문자열 표현을 반환합니다.
someObject.Execute(@
"Console.WriteLine(""Hello, world!"");
Console.WriteLine(""This demonstrates running a simple script"");
");
이러한 명령문을 스크립트 등으로 실행합니다.
실행 파일은 여기 예제 에서 볼 수 있듯이 팩토리 메서드를 사용하여 쉽게 얻을 수 있습니다. 필요한 것은 소스 코드와 예상되는 명명 된 매개 변수 목록입니다 (토큰은 {{{0}}과 같은 삼중 괄호 표기법을 사용하여 포함됩니다). }, string.Format () 및 Handlebars와 유사한 구문과의 충돌을 피하기 위해 :
IExecutable executable = ExecutableFactory.Default.GetExecutable(executableType, sourceCode, parameterNames, addedNamespaces);
각 실행 가능 객체 (스크립트 또는 표현식)는 스레드로부터 안전하고 저장 및 재사용 할 수 있으며 스크립트 내에서 로깅을 지원하고 타이밍 정보와 마지막 예외가 발생하는 경우 저장하는 등의 작업을 수행 할 수 있습니다. 또한 각 실행 파일에 대해 컴파일 된 Copy () 메서드가 있습니다. 저렴한 복사본 생성, 즉 스크립트 나 표현식에서 컴파일 된 실행 가능 객체를 템플릿으로 사용하여 다른 사람을 생성합니다.
이미 컴파일 된 스크립트 또는 명령문을 실행하는 오버 헤드는 보통 하드웨어에서 1 마이크로 초 미만으로 비교적 낮으며, 이미 컴파일 된 스크립트와 표현식은 재사용을 위해 캐시됩니다.