응용 프로그램 내에서 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 기능을 확장 -
나는 아마 내가 그것을 거 다중 스레드 수 있다는 사실을 알고, 자동 – Stokedout
별도의 나사 부분이 어렵지 않아 별도의 스레드에 그것을 만들 것입니다. 난 그냥 실행 및 값을 얻는 일반적인 방법이 필요합니다 –
그것은 [코드 Code0987 연결된]에서 코드를 복사 한 것 같습니다 (http://www.codeproject.com/Articles/9019/Compiling-and-Executing-Code-at) -실행 시간). 왜 기사의 일부만 사용하고 나머지 기사에서 설명하는 내용을 묻고 있습니까? – svick