複製代碼 代碼如下:/*
* 使用 C# 動態編譯代碼和執行
* 作者: yaob
*/
static void Main(string[] args)
{
// 編譯器
CodeDomProvider cdp = CodeDomProvider.CreateProvider("C#");
// 編譯器的參數
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("System.dll");
cp.GenerateExecutable = false;
cp.GenerateInMemory = true;
// 編譯結果
CompilerResults cr = cdp.CompileAssemblyFromSource(cp, HelloWorld());
if (cr.Errors.HasErrors) Console.WriteLine("編譯出錯!");
else
{
// 編譯後的程式集
Assembly ass = cr.CompiledAssembly;
// 得到HelloWorld類中的SayHello方法
Type type = ass.GetType("HelloWorld.HelloWorld");
MethodInfo mi = type.GetMethod("SayHello");
// 執行
mi.Invoke(null, null);
}
}
// 動態構建的代碼
static string HelloWorld()
{
StringBuilder sbCode = new StringBuilder();
sbCode.AppendLine("using System;");
sbCode.AppendLine("namespace HelloWorld");
sbCode.AppendLine("{");
sbCode.AppendLine(" class HelloWorld");
sbCode.AppendLine(" {");
sbCode.AppendLine(" public static void SayHello()");
sbCode.AppendLine(" {");
sbCode.AppendLine(" Console.WriteLine(\"Hello~ World~!\");");
sbCode.AppendLine(" }");
sbCode.AppendLine(" }");
sbCode.AppendLine("}");
return sbCode.ToString();
}