Ah *duh*, though Microsoft.Scripting.Silverlight.dll calls 
ScriptRuntime.LoadAssembly on each AssemblyPart in the AppManifest.xaml, it 
does *not* do the same thing for DLLs in zip files referenced by ExtensionPart, 
since Silverlight only gives us a way of getting files out of a zip, not 
enumerating its contents.

So, to correct myself, if you're using ExtensionParts, you'll have to call 
clr.AddReference for each DLL you want loaded. The reason why you don't see the 
expected types is because IronPython doesn't know about them.

We could require that those zip files have a AppManifest.xaml, which would list 
the DLLs, and then we could parse that and load the DLLs. Though asking 
Silverlight to implement ZIP contents enumeration is probably the best =)

~js

From: Lukas Cenovsky [mailto:cenov...@bakalari.cz]
Sent: Wednesday, April 28, 2010 6:14 AM
To: Discussion of IronPython; Jimmy Schementi
Subject: Re: [IronPython] AddReference to Silverlight toolkit assemblies

Well, I was wrong when I said it worked. Here is the scenario:

I have necessary .dlls in separate file called SLToolkit.zip which I reference 
in AppManifest.xaml:

  <Deployment.ExternalParts>
    <ExtensionPart Source="Microsoft.Scripting.zip" />
    <ExtensionPart Source="SLToolkit.zip" />
  </Deployment.ExternalParts>

There are the following files in SLToolkit.zip:

System.ComponentModel.DataAnnotations.dll

System.Windows.Controls.dll

System.Windows.Controls.Data.dll

System.Windows.Controls.Data.Input.dll

System.Windows.Data.dll

I want to use ChildWindow control. It works when I use it in XAML and load the 
XAML with XamlReader. But it does not work when I want to load it from code. If 
fails on importing because ChildWindow is not in System.Windows.Controls 
namespace.

I put System.Windows.Controls.dll into .xap file and test the following in 
Silverlight REPL:

py> import System.Windows.Controls

=> None

py> dir(System.Windows.Controls)

=> ['Border', 'Button', 'Canvas', 'CheckBox', 
'CleanUpVirtualizedItemEventArgs', ...]

py> clr.AddReferenceToFile('System.Windows.Controls.dll')

=> None

py> dir(System.Windows.Controls)

=> ['Border', 'Button', 'Calendar', 'CalendarBlackoutDatesCollection',

'CalendarDateChangedEventArgs', 'CalendarDateRange', 'CalendarMode',

'CalendarModeChangedEventArgs', 'CalendarSelectionMode', 'Canvas',

'CheckBox', 'ChildWindow', 'CleanUpVirtualizedItemEventArgs', ...]


It looks like the controls from System.Windows.Controls.dll are not merged into 
System.Windows.Controls namespace.

Is it bug or do I do something wrong?

--
-- Lukáš


Jimmy Schementi wrote:
Lukas,

When you use ExtensionPart, it calls Assembly.Load on each file in the zip file 
referenced, so you don't need to do clr.Addreference.

System.Windows.Data.dll and System.Windows.Controls.Data.dll are not DLLs in 
Silverlight; they are in the Silverlight SDK. So you'll have to package them up 
into a separate zip file which you include in your AppManfest, just like you 
did with the SLToolkit.zip.

~js

From: 
users-boun...@lists.ironpython.com<mailto:users-boun...@lists.ironpython.com> 
[mailto:users-boun...@lists.ironpython.com] On Behalf Of Lukas Cenovsky
Sent: Tuesday, March 23, 2010 5:42 PM
To: users@lists.ironpython.com<mailto:users@lists.ironpython.com>
Subject: [IronPython] AddReference to Silverlight toolkit assemblies

Hi all,
I use Silverlight toolkit in my IronPython Silverlight app. To lower bandwidth, 
I put all necessary Silverlight toolkit .dlls into separate file called 
SLToolkit.zip which I reference in AppManifest.xaml:

  <Deployment.ExternalParts>
    <ExtensionPart Source="Microsoft.Scripting.zip" />
    <ExtensionPart Source="SLToolkit.zip" />
  </Deployment.ExternalParts>

This works nicely if I don't need to reference assembly already existing in 
Silverlight - e.g. I do

clr.AddReference('System.Windows.Controls.Data')

and use DataGrid. Unfortunately, when I need to reference PagedCollectionView 
from System.Windows.Data, this approach does not work. Trying

from System.Windows.Data import PagedCollectionView

fails on ImportError: Cannot import name PagedCollectionView. Doing

import System.Windows.Data
System.Windows.Data.PagedCollectionView(some_data)

fails with AttributeError: attribute 'PagedCollectionView' of 'namespace#' 
object is read-only. When I try to add

clr.AddReference('System.Windows.Data')

if fails with: IOError: [Errno 2] could not find assembly: System.Windows.Data 
(check the Web server).

The only way how to make this work is to put System.Windows.Data.dll into .xap 
file and reference it with

clr.AddReferenceToFile('System.Windows.Data.dll')
from System.Windows.Data import PagedCollectionView


Is there a way to make it work when System.Windows.Data.dll is in the separate 
file? Or should I use another approach?

Thanks,

--
-- Lukáš



________________________________



_______________________________________________

Users mailing list

Users@lists.ironpython.com<mailto:Users@lists.ironpython.com>

http://lists.ironpython.com/listinfo.cgi/users-ironpython.com



_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to