我使用CSharpCodeProvider从string编译一个类,并将编译后的类的实例作为动态返回:
CodeDomProvider compiler = CSharpCodeProvider.CreateProvider("CSharp");
CompilerResults compilerResults = compiler.CompileAssemblyFromSource(parms, myClassCode);
Assembly assembly = compilerResults.CompiledAssembly;
resultType = assembly.GetType("MyClass");
var res = resultType.GetConstructor(new Type[] {}).Invoke(new object[] {});
return (dynamic)res;
所有编译没有错误并且返回实例是我需要的,但是当我尝试访问它的某个字段时,我得到一个例外:
'object'不包含MyInstancePublicField的定义
我认为我的错误是使用强制转换为动态类型,但我没有找到任何其他方式来访问仅在运行时才知道的字段。
答案 0 :(得分:0)
默认情况下,dynamic
不允许您使用不可访问的成员。
由于您的类型是在不同的程序集中定义的,因此您需要创建类型和属性public
。