示例#1
0
        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());
        }
示例#2
0
        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;
            }));
        }