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