日期:2014-05-18  浏览次数:20780 次

100分求解:“动态编译”问题
问题描述:

准备替换代码中以下语句:
sb.Append(" Console.WriteLine(\"动态编译\");");

假设外部有文本框TextBox1,如何在此处动态的执行TextBox1.text = "动态编译";
类似以下的概念,但以下这句显然不能执行:
sb.Append(" TextBox1.text = \"动态编译\";");
注意,是编译的时候写入,不是依靠编译后返回字符串。


------------------------------------------源码------------------------------------------
using System;
using System.Reflection;
using System.Globalization;
using Microsoft.CSharp;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Text;

namespace ConsoleApplication1
{
  public class Program
  {
  static void Main(string[] args)
  {
  CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();
  ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();
  CompilerParameters objCompilerParameters = new CompilerParameters();
  objCompilerParameters.ReferencedAssemblies.Add("System.dll");
  objCompilerParameters.GenerateExecutable = false;
  objCompilerParameters.GenerateInMemory = true;
  CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode());
  if (cr.Errors.HasErrors)
  {
  Console.WriteLine("编译错误:");
  foreach (CompilerError err in cr.Errors)
  {
  Console.WriteLine(err.ErrorText);
  }
  }
  else
  {
  Assembly objAssembly = cr.CompiledAssembly;
  object objHelloWorld = objAssembly.CreateInstance("DynamicCodeGenerate.HelloWorld");
  MethodInfo objMI = objHelloWorld.GetType().GetMethod("OutPut");
  objMI.Invoke(objHelloWorld, null);
  }
  Console.ReadLine();
  }

  static string GenerateCode()
  {
  StringBuilder sb = new StringBuilder();
  sb.Append("using System;");
  sb.Append(Environment.NewLine);
  sb.Append("namespace DynamicCodeGenerate");
  sb.Append(Environment.NewLine);
  sb.Append("{");
  sb.Append(Environment.NewLine);
  sb.Append(" public class HelloWorld");
  sb.Append(Environment.NewLine);
  sb.Append(" {");
  sb.Append(Environment.NewLine);
  sb.Append(" public void OutPut()");
  sb.Append(Environment.NewLine);
  sb.Append(" {");
  sb.Append(Environment.NewLine);
  sb.Append(" Console.WriteLine(\"动态编译\");");
  sb.Append(Environment.NewLine);
  sb.Append(" }");
  sb.Append(Environment.NewLine);
  sb.Append(" }");
  sb.Append(Environment.NewLine);
  sb.Append("}");

  string code = sb.ToString();
  Console.WriteLine(code);
  Console.WriteLine();

  return code;
  }
  }
}

------解决方案---------