我正在使用emit动态创建类型。我对此很陌生,所以我想查看我创建的代码,以确保它是正确的。
是否可以查看生成的代码?什么是适当的方法?
[编辑] 标题更正
答案 0 :(得分:0)
要转储动态程序集的内容,可以使用以下模式:
// create a name
AssemblyName assemblyName = new AssemblyName("MyDynamicAssembly");
// create an assembly builder which can be dumped to disk. This is essential.
AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
// define the main module
ModuleBuilder mb = ab.DefineDynamicModule(assemblyName.Name, assemblyName.Name + ".dll");
// define your type, the visibility accessor can be whatever, in this sample it is "public"
TypeBuilder tb = mb.DefineType("Type1", TypeAttributes.Public);
// seal the type, and get it's runtime descriptor. From now on, you can use the type
Type t = tb.CreateType();
// dump the assembly in the current directory, use an overload to specify the location
ab.Save(assemblyName.Name + ".dll");
这样,您可以检查装配体。有关MSDN的更多信息。
请注意,如果您的意图是定义可以调用的方法,并且您对整个类型定义不感兴趣,则可以使用DynamicMethod
类极大地简化生成过程。
DynamicMethod
类负责有效地处理单个方法的生成,而没有生成动态程序集的开销(就内存而言)。