> > On Sat, May 9, 2009 at 4:30 AM, Michael Foord
> > <fuzzy...@voidspace.org.uk <mailto:fuzzy...@voidspace.org.uk>>
> wrote:
> >
> >     Hello guys,
> >
> >     I'm having problems with a C# Silverlight application that hosts
> >     IronPython.
> >
> >     First of all, this page
> >     http://sdlsdk.codeplex.com/Wiki/View.aspx?title=Hosting  implies
> >     that the following code should load assemblies for the hosted
> >     IronPython code:
> >
> >               foreach (string name in new string[] { "mscorlib",
> >     "System", "System.Windows", "System.Windows.Browser",
> "System.Net" })
> >               {
> >                   runtime.Host.PlatformAdaptationLayer.LoadAssembly(name);
> >               }
> >
> >     It doesn't - an import from System.Windows fails. The following
> >     code works as in a normal hosted environment:
> >
> >               runtime.LoadAssembly(typeof(String).Assembly);
> >               runtime.LoadAssembly(typeof(Uri).Assembly);
> >               runtime.LoadAssembly(typeof(Canvas).Assembly);

The documentation is wrong; always trust what the code in 
Microsoft.Scripting.Silverlight.DynamicApplication does the equivalent of:

foreach (string name in new string[] { "mscorlib", "System", "System.Windows", 
"System.Windows.Browser", "System.Net" }) {
    
runtime.LoadAssembly(runtime.Host.PlatformAdaptationLayer.LoadAssembly(name));
}

The PAL.LoadAssembly is able to find assemblies in the XAP or platform and 
loads them, but you always need to call runtime.LoadAssembly to have it loaded 
on the runtime.

FYI, "Hosted" IronPython code is pretty much the same as "non-hosted" ... just 
that the "non-hosted" scenario does the hosting for you (with the 
DynamicApplication type). So as long as you're mimicking how DynamicApplication 
does things, you should be fine.

> >     Secondly, which is much worse but may be related, imports from
> >     Python files inside the xap fail when IronPython is hosted. I am
> >     using the following code:
> >
> >               ScriptRuntimeSetup setup = Python.CreateRuntimeSetup(null);
> >               setup.HostType =
> >     typeof(Microsoft.Scripting.Silverlight.BrowserScriptHost);
> >               ScriptRuntime runtime = new ScriptRuntime(setup);
> >               ScriptEngine pe = Python.GetEngine(runtime);
> >                         ScriptScope scope = pe.CreateScope();
> >               ScriptSource source =
> >     pe.CreateScriptSourceFromString(python_source,
> >     SourceCodeKind.Statements);
> >               source.Execute(scope);
> >
> >     How do I setup the platform adaptation layer so that it can import
> >     from inside the xap?

Again, doing exactly what DynamicApplication does is key =)

I believe you need to set the SearchPaths option so it knows where to look for 
source files. In Silverlight, "" is the root of the XAP file, so this should do 
the trick:

setup.Options["SearchPaths"] = new string[] { String.Empty };

> >     All the best,
> >
> >
> >     Michael

Let me know if this doesn't work for you, and I can send you an app that does. 
=)
_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to