动态创建对象
- 创建对象环境
-
获取当前应用程序集引用的类库详细信息,动态类也将调用此类库
AssemblyName[] refAss = Obj.GetType().Assembly.GetReferencedAssemblies();
-
获取引用类库的本地路径
String[] srtLocations = refAss.Foreach(m => m.Location).ToArray();
-
配置编译参数
CompilerParameters options = new CompilerParameters();
options.GenerateExecutable = false;
options.GenerateInMemory = true;
options.RefernecedAssemblies.AddRang(srtLocations);
- 编译
-
创建C#语言编译器对象
CodeDomProvider cSharpProvider = CSharpCodeProvider.CreateProvider("CSarp");
-
执行编译,并且返回编译结果
CompilerResults results = cSharpProvider.CompileAssemblyFromSource(options,source);
-
获取编译错误列表
results.Errors.HasErrors;
-
获取对象实例
-
获取编译的程序集
Assembly dynamicAssembly = results.CompiledAssembly;
-
获取程序集中的成员
Type type = dynamicAssembly.GetTypes()[0];
-
根据成员类型动态创建成员对象
Object obj = dynamicAssembly.CreateInstance(type.FullName);