using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.Collections; using System.Diagnostics; using System.IO; namespace ConsoleApplication { class Program3 { static void Main(string[] args) { // 定义需要动态执行的 C# 代码字符串,当然也可从文本文件中读取。 string code = @" using System; namespace MyNamespace { public class MyClass { private string name; public MyClass(string name) { this.name = name; } public void Test() { Console.WriteLine(""{0} - {1}"", name, DateTime.Now); } } } "; // 创建编译器对象 Microsoft.CSharp.CSharpCodeProvider p = new Microsoft.CSharp.CSharpCodeProvider(); System.CodeDom.Compiler.ICodeCompiler cc = p.CreateCompiler(); // 设置编译参数 System.CodeDom.Compiler.CompilerParameters options = new System.CodeDom.Compiler.CompilerParameters(); options.ReferencedAssemblies.Add("System.dll"); options.GenerateInMemory = true; options.OutputAssembly = "MyTest"; // 开始编译 System.CodeDom.CodeSnippetCompileUnit cu = new System.CodeDom.CodeSnippetCompileUnit(code); System.CodeDom.Compiler.CompilerResults cr = cc.CompileAssemblyFromDom(options, cu); // 执行动态程序集相关内容。 Type t = cr.CompiledAssembly.GetType("MyNamespace.MyClass"); object o = cr.CompiledAssembly.CreateInstance("MyNamespace.MyClass", false, System.Reflection.BindingFlags.Default, null, new object[] { "Tomdd" }, System.Globalization.CultureInfo.CurrentCulture, null); t.InvokeMember("Test", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod, null, o, null); Console.ReadKey(); } } }
转自:http://blog.163.com/kunkun0921@126/blog/static/16920433220126623536526/