Thanks Jimmy, it really works now.

I have written a small howto for those interested:
http://gui-at.blogspot.com/2010/05/distributing-silverlight-application.html

--
-- Lukáš


Jimmy Schementi wrote:

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