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.

Reply via email to