If you provide example code we can probably point out what's missing/needs- correction. I don't know off hand how you can write a valid assembly to disk without being able to read types with Reflector/ILDASM.
Here's the most simple case of dynamnically creating an assembly: AssemblyName assemblyName = new AssemblyName("dynamicAssembly"); AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save); ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule (assemblyName.Name, assemblyName.Name + ".dll"); TypeBuilder typeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public); typeBuilder.CreateType(); assemblyBuilder.Save(Path.GetFileName (moduleBuilder.FullyQualifiedName)); ...which loads fine in Reflector. For a property with a getter and a setter, the following between the call to DefineType and CreateType has worked for me: // define a field for the property FieldBuilder fieldBuilder = typeBuilder.DefineField("value", typeof (int), FieldAttributes.Private); // define the property PropertyBuilder propertyBuilder = typeBuilder.DefineProperty ("Value", PropertyAttributes.HasDefault, typeof (int), null); // define the property getter MethodBuilder methodBuilder = typeBuilder.DefineMethod("get_Value", MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig, typeof (int), Type.EmptyTypes); // emit the body of the getter ILGenerator ilGenerator = methodBuilder.GetILGenerator(); ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Ldfld, fieldBuilder); ilGenerator.Emit(OpCodes.Ret); // attach the getter to the property propertyBuilder.SetGetMethod(methodBuilder); // define the property setter methodBuilder = typeBuilder.DefineMethod("set_Value", MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig, null, new Type[] {typeof (int)}); // emit the body of the setter ilGenerator = methodBuilder.GetILGenerator(); ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Ldarg_1); ilGenerator.Emit(OpCodes.Stfld, fieldBuilder); ilGenerator.Emit(OpCodes.Ret); // attach the setter to the property propertyBuilder.SetSetMethod(methodBuilder); Documentation in-and-around http://msdn.microsoft.com/en- us/library/4xtysk39.aspx usually has enough info for what I'm usually doing. For example: http://msdn.microsoft.com/en- us/library/system.reflection.emit.assemblybuilder.aspx Cheers -- Peter On Thu, 17 Jul 2008 09:21:03 -0500, Mike Andrews <[EMAIL PROTECTED]> wrote: >I'm needing to do some dynamic code generation. >I've been reading up on the Reflection.Emit namespace but I'm having some >issues. >When I compile a dynamic assembly and then save to disk, I can't read the >types from it in Reflector or ILDASM. > >Do any of you have any good tutorials or sample code I might examine? > >I mainly want to create a dynamic class with read/write properties. =================================== This list is hosted by DevelopMentorĀ® http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com