2013-06-23 7 views
0

응용 프로그램 내에서 C# 콘솔 응용 프로그램을 컴파일하여 반환 된 결과를 얻고 싶습니다. 나는 (내가 콘솔이 실제로 등을 표시하지 않음)이 자동으로 발생 할 내가 어셈블리를 실행하고 결과를 얻을 것입니다 내가 어떻게이 코드빌드 C# 응용 프로그램 런타임 및 결과 얻기

private Assembly BuildAssembly(string code) 
{ 
    Microsoft.CSharp.CSharpCodeProvider provider = 
     new CSharpCodeProvider(); 
    ICodeCompiler compiler = provider.CreateCompiler(); 
    CompilerParameters compilerparams = new CompilerParameters(); 
    compilerparams.GenerateExecutable = false; 
    compilerparams.GenerateInMemory = true; 
    CompilerResults results = 
     compiler.CompileAssemblyFromSource(compilerparams, code); 
    if (results.Errors.HasErrors) 
    { 
     StringBuilder errors = new StringBuilder("Compiler Errors :\r\n"); 
     foreach (CompilerError error in results.Errors) 
     { 
      errors.AppendFormat("Line {0},{1}\t: {2}\n", 
        error.Line, error.Column, error.ErrorText); 
     } 
     throw new Exception(errors.ToString()); 
    } 
    else 
    { 
     return results.CompiledAssembly; 
    } 
} 

가 있다고 가정하자?

public object ExecuteCode(string code, string namespacename, string classname, string functionname, bool isstatic, params object[] args) 
{ 
    var asm = BuildAssembly(code); 
    object instance = null; 
    Type type; 
    if(isstatic) 
    { 
     type = asm.GetType(namespacename + "." + classname); 
    } 
    else 
    { 
     instance = asm.CreateInstance(namespacename + "." + classname); 
     type = instance.GetType(); 
    } 
    return type.GetMethod(functionname).Invoke(instance, args); 
} 

이 방법은 단순히 BuildAssembly 기능을 확장 -

+0

나는 아마 내가 그것을 거 다중 스레드 수 있다는 사실을 알고, 자동 – Stokedout

+0

별도의 나사 부분이 어렵지 않아 별도의 스레드에 그것을 만들 것입니다. 난 그냥 실행 및 값을 얻는 일반적인 방법이 필요합니다 –

+1

그것은 [코드 Code0987 연결된]에서 코드를 복사 한 것 같습니다 (http://www.codeproject.com/Articles/9019/Compiling-and-Executing-Code-at) -실행 시간). 왜 기사의 일부만 사용하고 나머지 기사에서 설명하는 내용을 묻고 있습니까? – svick

답변

3

여기 내가 찾은 뭔가. 당신이 일하려면

Source

+0

어디에서 찾았습니까? – svick

+0

그리고이 값을 반환합니까? –

+0

예, 호출 한 함수가 반환하는 값을 반환합니다. – Code0987