2012-03-03 3 views
0

나는 C# 3.5 winforms 프로젝트 작업 중입니다.동적으로 C# 코드를 실행하는 방법

문자열 변수에있는 일부 코드를 동적으로 실행하려고합니다. 내가 실행하고자하는 코드가이 같은 것입니다 :

(GetSetting("MYSETT1") == 1? "OK" : "Cancel") 

내 프로젝트에 존재하는 방법을 사용하고자하고이를 사용하여 내가 몇 가지 작업을 수행합니다.

동적으로 가능합니까?

+2

는 방법으로 그것을 확인하고 그것을 호출합니다. 여기서 동적 인 것은 무엇입니까? –

+0

이 코드처럼 나는 수백 개의 명령을 가지고 있기 때문에 많은 메소드를 만들려면 아주 좋은 해결책은 아닙니다. –

+1

동적 코드 생성의 경우 [CodeDOM] (http://msdn.microsoft.com/en-us/library/y2k85ax6.aspx) 또는 [Emit] (http://msdn.microsoft.com/en- 우리의/라이브러리/system.reflection.emit.ilgenerator.emit % 28v = vs.71 % 29.aspx) 또는 ...하지만, 귀하의 경우, 난 그냥 구성 설정이라고 생각, 당신은 XML 및 일부 처리 할 수 ​​있습니다 코드, 문제에 대한 자세한 정보를 제공하면 더 잘 도와 드릴 수 있습니다. –

답변

1

동적으로 코드를 컴파일하고 실행할 수 있습니다.

이 링크는 도움이 될 수 있습니다 :

Using the CodeDOM

Dynamically executing code in .Net

+0

어떻게이 동적 코드로 내 프로젝트에있는 메서드를 사용할 수 있습니까? –

+0

내 솔루션을 찾았습니다 : CodeDOM. 내 프로젝트에서 클래스의 메서드를 실행하려면 해당 어셈블리를 추가해야합니다. –

0
+0

새롭고 반짝이는 것이 무엇이든 이전의 모든 기억을 지워줍니다. –

+0

마이크로 소프트 출신의 모든 것이 자유롭고 오픈 소스였던 것에 대한 모든 기억을 지워 버리십시오. 그것은 NAnt/NDoc/NUnit/NHibernate (매우 긴리스트) 였지만 이제는 Microsoft에서 얻은 정보가 매우 제한적입니다. –

1

, 당신은 마이크로 소프트의 제품을 사용하려는 경우, 당신은 로슬린 때까지 기다려야합니다

http://www.mono-project.com/CsharpRepl

을 통해 가능하게한다 "순수한"Microsoft 솔루션을 사용하면 Roslyn을 확인해야합니다. 그러나 그때까지 당신은 코드 플렉스에 Fast Lightweight Expression Evaluator 프로젝트를 살펴 할 수 있습니다 :

도망는 .NET 프레임 워크에 대한 식 파서 및 평가입니다. 이 함수를 사용하면 런타임에 sqrt (a^2 + b^2)와 같은 문자열 표현식의 값을 계산할 수 있습니다. 사용자 정의 컴파일러, 강력한 유형의 표현식 언어 및 간단한 코드gen을 사용하여 IL에 직접 표현식을 컴파일합니다. 이는 표현식 평가가 매우 빠르고 효율적이라는 것을 의미합니다. 표현을 기반으로 이미지를 생성하고 직접 볼 수있는 데모를 사용해보십시오.

이것이 귀하의 청구서에 맞지 않으면 아래 내 자신의 프로젝트에 대한 부끄러운 개인 홍보를 확인해야합니다.

ExpressionEvaluator

ExpressionEvaluator

는 개발자가 C# 및 VB .NET 표현식을 평가하는 데 도움이 할 수있는 라이브러리입니다. 평가해야하는 표현식은 .NET Framework의 자체 CodeDOM을 통해 컴파일되므로 거의 모든 언어 기능이 지원됩니다. 라이브러리는 스크립팅과 같은 기능을 위해 원격 객체를 표현식에 노출시킬 수 있습니다. 모든 표현식 평가는 샌드 박스 처리됩니다.

static void Main(string[] args) 
{ 
    var expressions = new List<string> 
          { 
           "3 * 5", 
           "Log10(50)", 
           "Parameters!Greeting + \" World!\"" 
          }; 

    // An ExpressionMeta contains the expressions and extensions to be compiled. 
    var meta = new ExpressionMeta("VisualBasic"); 

    // Add the expressions to be compiled. 
    foreach(var expression in expressions) 
     meta.AddExpression(expression); 

    // Add the extensions to be compiled. 
    var extension = new Dictionary<string, string> {{"Greeting", "Hello"}}; 
    meta.AddExtensionIgnoreAssembly(new Extension("Parameters", extension)); 

    // Compile the expressions 
    using(var evaluator = meta.Compile()) 
    { 
     // Evaluate the expression 
     foreach(var expression in expressions) 
      Console.WriteLine("{0}", evaluator.Evaluate(expression)); 
    } 
} 

출력

15 
1.69897000433602 
Hello World! 
관련 문제