public void CanCompileAndLoadADll() { var cs = @"public class Foo{public int Version() {return 1;}}"; var assembly = new CSharpCodeProvider() .CompileAssemblyFromSource(new CompilerParameters(), cs) .CompiledAssembly; dynamic foo = assembly.CreateInstance("Foo"); Assert.AreEqual(1, foo.Version()); }
private static Func <DataRow, object> NewClass(DataTable table) { var classSource = new StringBuilder(); classSource.Append(string.Format("public class {0} \n", table.TableName)); classSource.Append("{\n"); foreach (DataColumn column in table.Columns) { classSource.Append(string.Format("public {0} {1}", column.DataType.Name, column.ColumnName) + " {set;get;}\n"); } classSource.Append("}\n"); //设置编译参数。 var paras = new CompilerParameters { GenerateExecutable = true, GenerateInMemory = true }; paras.ReferencedAssemblies.Add("System.dll"); paras.ReferencedAssemblies.Add("System.Data.dll"); //编译代码,获取编译后的程序集。 var assembly = new CSharpCodeProvider().CompileAssemblyFromSource(paras, classSource.ToString()).CompiledAssembly; return(new Func <DataRow, object>(row => { var entity = assembly.CreateInstance(table.TableName); foreach (var pro in entity.GetType().GetProperties()) { foreach (DataColumn column in table.Columns) { if (column.ColumnName.Replace("_", "").ToUpper() == pro.Name.ToUpper() && row[column] != DBNull.Value) { pro.SetValue(entity, row[column], null); } } } return entity; })); }