Hello Everyone. We have sucesfully ported Cecil to work under Silverlight (as a proof of concept, but we can contribute it if anyone will). But the problem that we can't create even simple DLLs that will be functional in Silverlight.
We are getting that: System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.. in System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) in System.Reflection.RuntimeModule.GetTypes() in System.Reflection.Assembly.GetTypes() ... System.TypeLoadException: Could not load type '<Module>' from assembly 'SimpleAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' because the parent does not exist. After doing that: var assArray = SimpleClassGenerator.CreateAssembly(); var ass = new AssemblyPart().Load(new MemoryStream(assArray)); var type = ass.GetTypes(); Where: public static byte[] CreateAssembly() { var assembly = AssemblyFactory.DefineAssembly("SimpleAssembly", "SimpleAssembly.1", TargetRuntime.NET_2_0, AssemblyKind.Dll); var nsName = "SimpleAssembly.Classes"; var typeName = "ClassA"; var td = new TypeDefinition(typeName, nsName, TypeAttributes.Public, assembly.MainModule.Import(typeof(object))); assembly.MainModule.Types.Add(td); CreateProperty("IntProperty", typeof(int), td); CreateProperty("StringProperty", typeof(string), td); var ctor = new MethodDefinition(MethodDefinition.Ctor, MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName, assembly.MainModule.Import(typeof(void))); ctor.Body.CilWorker.Append(ctor.Body.CilWorker.Create(OpCodes.Ldarg_0)); ctor.Body.CilWorker.Append(ctor.Body.CilWorker.Create(OpCodes.Call, assembly.MainModule.Import(typeof(object).GetConstructor(new Type[0])))); ctor.Body.CilWorker.Append(ctor.Body.CilWorker.Create(OpCodes.Ret)); td.Methods.Add(ctor); var method = new MethodDefinition("ToString", MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig, assembly.MainModule.Import(typeof(string))); td.Methods.Add(method); method.Body.CilWorker.Append(method.Body.CilWorker.Create(OpCodes.Ldarg_0)); method.Body.CilWorker.Append(method.Body.CilWorker.Create(OpCodes.Call, td.Properties[0].GetMethod)); method.Body.CilWorker.Append(method.Body.CilWorker.Create(OpCodes.Box, assembly.MainModule.Import(typeof(int)))); method.Body.CilWorker.Append(method.Body.CilWorker.Create(OpCodes.Ldarg_0)); method.Body.CilWorker.Append(method.Body.CilWorker.Create(OpCodes.Call, td.Properties[1].GetMethod)); method.Body.CilWorker.Append(method.Body.CilWorker.Create(OpCodes.Call, assembly.MainModule.Import(typeof(string).GetMethod("Concat", new[] { typeof(object), typeof(object) })))); method.Body.CilWorker.Append(method.Body.CilWorker.Create(OpCodes.Ret)); //assembly.MainModule.SaveSymbols(); var stream = new MemoryStream(); AssemblyFactory.SaveAssembly(assembly, stream); return stream.GetBuffer(); } Any suggestions appreciated. Thank you. Max. -- -- mono-cecil To unsubscribe from this group, send email to mono-cecil+unsubscribegooglegroups.com or reply to this email with the words "REMOVE ME" as the subject.