C#实现动态编译代码
生活随笔
收集整理的這篇文章主要介紹了
C#实现动态编译代码
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
/*------------------------------------------------------------------------------* Copyright (C) 2013 * 版權(quán)所有。* * 文件名: Compile.cs* 功能說(shuō)明: ** 創(chuàng)建人: it_Eric* 創(chuàng)建時(shí)間: 2013/10/25 16:19:52* * 修改人: * 修改說(shuō)明: *
*-----------------------------------------------------------------------------*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.IO;
using System.Reflection;namespace TestDemo
{public class Compile{private string prefix = "using System;" +"public static class Driver" +"{" +"public static void Run()" +"{";private string postfix ="}" +"}";public string CompileAndRun(string input, out bool hasError){hasError = false;string returnData = null;CompilerResults results = null;using (var provider = new CSharpCodeProvider()){var options = new CompilerParameters();options.GenerateInMemory = true;var sb = new StringBuilder();sb.Append(prefix);sb.Append(input);sb.Append(postfix);results = provider.CompileAssemblyFromSource(options, sb.ToString());}if (results.Errors.HasErrors){hasError = true;var errorMessage = new StringBuilder();foreach (CompilerError error in results.Errors){errorMessage.AppendFormat("{0}{1}", error.Line, error.ErrorText);returnData = errorMessage.ToString();}}else{TextWriter temp = Console.Out;var writer = new StringWriter();Console.SetOut(writer);Type drivertype = results.CompiledAssembly.GetType("Driver");drivertype.InvokeMember("Run", System.Reflection.BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public, null, null, null);Console.SetOut(temp);returnData = writer.ToString();}return returnData;}}
}
?
總結(jié)
以上是生活随笔為你收集整理的C#实现动态编译代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: error: Your local ch
- 下一篇: C#反射破坏单例