2008-09-23 6 views
6

내 응용 프로그램에서 javascript/Python/Ruby를 실행하고 싶습니다.C에서 스크립트 실행

사용자의 정의에 따라 자동으로 프로세스를 만드는 응용 프로그램이 있습니다. 이 프로세스는 C#에서 생성됩니다. 고급 사용자가 미리 정의 된 위치에 스크립트를 삽입 할 수있게하려고합니다. 이러한 스크립트는 C# 프로세스에서 실행해야합니다. 예를 들어, 생성 된 프로세스에는 몇 가지 활동이 있고 중간에 스크립트를 실행 한 다음 이전과 같이 프로세스를 계속 진행해야합니다. C#에서 스크립트를 실행할 수있는 메커니즘이 있습니까?

답변

5

기본적으로 생성 된 코드에서 주입 지점을 정의하는 방법과 거기에서 python/ruby ​​/ whatev 스크립트를 실행하는 방법의 두 가지 문제가 있습니다.

프로세스를 생성하는 방법에 따라 각 가능한 주입 지점에 기능을 추가 할 수 있습니다. 함수는 사용자가 주어진 점이있는 스크립트를 연결했는지 여부를 확인하고, 그렇다면 IronPython/IronRuby (선택적으로 지정된 매개 변수 사용)을 호출하여 스크립트를 실행합니다.

단점은 다음과 같습니다. 스크립트에서 생성 된 프로세스로의 제한된 액세스 가능성 (기본적으로 매개 변수로 전달 된 변수에만 액세스 할 수 있음). (IronPython의 현재 버전에는 몇 가지 기본 시스템 기능이 생략되어 있습니다).

1

CSharpCodeProvider 클래스를 사용하여 C# 응용 프로그램 내에서 C# 코드를 컴파일 할 수 있습니다.

컴파일이 에서는 CompilerResults 클래스의 CompiledAssembly 속성을 통해 반환하면 결과 어셈블리를 실행할 수 있습니다 성공하면

.

2

IronPython과 IronRuby를 살펴보면 C#과 쉽게 상호 운용 할 수 있습니다.

0

"즉시"C# 코드를 메모리 어셈블리로 컴파일 할 수 있습니다. IronPython과 IronRuby에서도 가능하다고 생각합니다. CodeDomProvider.CreateProvider 방법을보십시오.

스크립트를 많이 실행해야하거나 프로세스가 오랫동안 실행되는 경우 이러한 어셈블리를 다른 AppDomain으로로드 할 수 있습니다. 그리고 스크립트 완료 후에 AppDomain을 언로드하십시오. 그렇지 않으면 메모리에서 제거 할 수 없습니다. 이것은 모든 호출을 마샬링해야하기 때문에 프로젝트의 다른 클래스에 약간의 영향을 미칩니다.

1

굉장 C# 스크립트 언어 - Script.Net

+0

정말 멋집니다. 나는 그런 식으로 잠시 뒤로 사용할 수있었습니다. – mattlant

1

.NET에는 PowerShell의 런타임 엔진을 포함하여 모든 .NET 응용 프로그램에 포함될 수있는 스크립팅 언어가 있습니다.