[IronPython] Compiling with Pyc for Silverlight

Michael Foord fuzzyman at voidspace.org.uk
Wed Apr 22 01:01:41 CEST 2009


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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: app.xap
Type: application/octet-stream
Size: 4987 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20090422/09b300a9/attachment.obj>


More information about the Ironpython-users mailing list