[IronPython] Compiling with Pyc for Silverlight

Dino Viehland dinov at microsoft.com
Wed Apr 22 01:21:28 CEST 2009


For some reason the re-write didn't work.  After the re-write the new binary in ildasm 
should have a manifest that looks like:

.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
  .ver 2:0:5:0
}
.assembly extern Microsoft.Scripting
{
  .publickeytoken = (31 BF 38 56 AD 36 4E 35 )
  .ver 0:9:5:0
}
.assembly extern IronPython
{
  .publickeytoken = (31 BF 38 56 AD 36 4E 35 ) 
  .ver 2:0:5:0
}
.assembly extern Microsoft.Scripting.Core
{
  .publickeytoken = (31 BF 38 56 AD 36 4E 35 ) 
  .ver 0:9:5:0
}

Where the key part is the 5's in all of the version strings.    I did:

ildasm froob.dll /out:froob.txt

[updated version numbers]

ilasm /DLL froob.txt /resource:froob.res /out:froob2.dll

and it seems to work.

> -----Original Message-----
> From: users-bounces at lists.ironpython.com [mailto:users-
> bounces at lists.ironpython.com] On Behalf Of Michael Foord
> Sent: Tuesday, April 21, 2009 4:02 PM
> To: Discussion of IronPython
> Subject: Re: [IronPython] Compiling with Pyc for Silverlight
> 
> Dino Viehland wrote:
> > Do you have a simple repro XAP you can send me and I'll take a look?
> >
> > I'm not entirely sure I'll know what's going on as CoreCLR isn't the
> > CLR I'm used to debugging but it's not that different :)
> >
> >
> Attached is a xap file. It has a very simple package compiled with Pyc
> - and importing it throws the same error.
> 
> Michael
> 
> >> -----Original Message-----
> >> From: users-bounces at lists.ironpython.com [mailto:users-
> >> bounces at lists.ironpython.com] On Behalf Of Michael Foord
> >> Sent: Tuesday, April 21, 2009 2:41 AM
> >> To: Discussion of IronPython
> >> Subject: Re: [IronPython] Compiling with Pyc for Silverlight
> >>
> >> Dino Viehland wrote:
> >>
> >>> You're compiling to a DLL and then trying to import (vs compiling
> to
> >>>
> >> an EXE)?
> >>
> >>>
> >> Yes - it's support packages we're trying to compile. I would have
> >> thought that compiling an exe for Silverlight was a lost cause... :-
> )
> >>
> >> There are two motivations, mainly speeding up import time but also
> >> source code obfuscation. If the assembly is genuinely serializable
> >> then we may at least achieve the second, so long as it doesn't make
> >> import time worse.
> >>
> >> Michael
> >>
> >>
> >>>> -----Original Message-----
> >>>> From: users-bounces at lists.ironpython.com [mailto:users-
> >>>> bounces at lists.ironpython.com] On Behalf Of Michael Foord
> >>>> Sent: Monday, April 20, 2009 3:07 PM
> >>>> To: Discussion of IronPython
> >>>> Subject: Re: [IronPython] Compiling with Pyc for Silverlight
> >>>>
> >>>> Michael Foord wrote:
> >>>>
> >>>>
> >>>>> Jb Evain wrote:
> >>>>>
> >>>>>
> >>>>>> Hey Michael,
> >>>>>>
> >>>>>> On 4/20/09, Michael Foord <fuzzyman at voidspace.org.uk> wrote:
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>>  I guess a full IL writer would be needed - which means back to
> >>>>>>> Cecil and the like and seeing if parts of them could be run on
> >>>>>>> Silverlight.
> >>>>>>> *sigh*
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>> You just want to change the references to an assembly from the
> >>>>>>
> >>>>>>
> >>>> desktop
> >>>>
> >>>>
> >>>>>> version to the SL version? With Cecil it's like:
> >>>>>>
> >>>>>> var assembly = AssemblyFactory.GetAssembly (file); foreach (var
> >>>>>> reference in assembly.MainModule.AssemblyReferences)
> >>>>>>
> >> {
> >>
> >>>>>>     if (!IsTargetAssembly (reference))
> >>>>>>         continue;
> >>>>>>
> >>>>>>     reference.Version = new Version (2, 0, 5, 0); }
> >>>>>> AssemblyFactory.SaveAssembly (assembly, file);
> >>>>>>
> >>>>>> Now it doesn't guarantee that the resulting assembly is
> coherent,
> >>>>>> visibility wise, as you may have used methods that are not
> >>>>>> visible
> >>>>>>
> >>>>>>
> >>>> or
> >>>>
> >>>>
> >>>>>> not existent in SL.
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>> Thanks for that - if it would work it would be really useful,
> >>>>>
> >>>>>
> >>>> however...
> >>>>
> >>>>
> >>>>> I think I've done the equivalent of this using ildasm / ilasm.
> >>>>> I've disassembled the assembly to IL, then replaced the
> references
> >>>>> with
> >>>>>
> >>>>>
> >>>> the
> >>>>
> >>>>
> >>>>> references to Silverlight assemblies and re-assembled.
> >>>>>
> >>>>> The resulting assembly throws exactly the same error - which
> makes
> >>>>>
> >> me
> >>
> >>>>> think that the assemblies compiled by Pyc are using things that
> >>>>>
> >>>>>
> >>>> aren't
> >>>>
> >>>>
> >>>>> available in Silverlight. *However* -
> >>>>> Microsoft.Runtime.CompilerServices.StrongBox does exist in
> >>>>> Silverlight. I think I'll try the whole process again just to
> see.
> >>>>>
> >> My
> >>
> >>>>> guess is that rewriting would require an intimate knowledge of
> the
> >>>>> differences between the CoreCLR and standard .NET.
> >>>>>
> >>>>>
> >>>>>
> >>>> No - I've rerun the whole process from compiling with Pyc through
> >>>> to replacing the references in the il and reassembling. Same
> error.
> >>>>
> >> Shame.
> >>
> >>>> SystemError: Could not load type
> >>>> 'Microsoft.Runtime.CompilerServices.StrongBox`1' from assembly
> >>>> 'Microsoft.Scripting.Core, Version=2.0.5.0, Culture=neutral,
> >>>> PublicKeyToken=31bf3856ad364e35'.app.py
> >>>>
> >>>> Michael Foord
> >>>>
> >>>>
> >>>>
> >>>>> I can't import it in a Silverlight application though (the
> >>>>>
> >> following
> >>
> >>>>> code does work on the desktop version of IronPython):
> >>>>>
> >>>>> import clr
> >>>>> clr.AddReference('Microsoft.Scripting')
> >>>>> clr.AddReference('Microsoft.Scripting.Core')
> >>>>> from  Microsoft.Runtime.CompilerServices import StrongBox
> >>>>>
> >>>>> ImportError: No module named Runtime
> >>>>>
> >>>>> Michael
> >>>>>
> >>>>>
> >>>>>
> >>>> --
> >>>> http://www.ironpythoninaction.com/
> >>>> http://www.voidspace.org.uk/blog
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> Users mailing list
> >>>> Users at lists.ironpython.com
> >>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> >>>>
> >>>>
> >>> _______________________________________________
> >>> Users mailing list
> >>> Users at lists.ironpython.com
> >>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> >>>
> >>>
> >> --
> >> http://www.ironpythoninaction.com/
> >>
> >> _______________________________________________
> >> Users mailing list
> >> Users at lists.ironpython.com
> >> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> >>
> > _______________________________________________
> > Users mailing list
> > Users at lists.ironpython.com
> > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> >
> 
> 
> --
> http://www.ironpythoninaction.com/
> http://www.voidspace.org.uk/blog
> 




More information about the Ironpython-users mailing list