views:

287

answers:

1

I'm embedding IronPython in my C# application. For some reason I'm having trouble loading assemblies. Specifically, I want System.dll so I can have access to .NET classes like DateTime.

If I try the line:

_runtime.LoadAssembly(_runtime.Host.PlatformAdaptationLayer.LoadAssembly("System"));

I get:

could not load file or assembly 'System'

If I explicitly type the path to C:/WINDOWS/Microsoft.NET/.../System.dll I get:

The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)

So then I tried doing the import using clr inside the Python script:

import clr
clr.AddReference('System')
from System import DateTime

And now I get:

Cannot import name DateTime

Where am I going wrong? Why is DateTime not in System, and why can't LoadAssembly find System.dll? Do I need to explicity set some search paths for IronPython? Is it finding an invalid 'System'?

This all works fine when I test in the IronPython interpreter.

+2  A: 

I use engine.Runtime.LoadAssembly(typeof(string).Assembly); to get the System assembly loaded; I believe this is how the IronPython console does it as well.

P.S. Don't forget that the source to IronPython is available; it's a gold mine for stuff like this.

Jeff Hardy
Thanks, I should really dig in there and see what else I can find.
cgyDeveloper
What module do I need to import in order to call engine.Runtime.LoadAssembly()?
Tim Lovell-Smith
It should be on the ScriptRuntime class in Microsoft.Scripting.dll. It's not an extension method as far as I can tell. This is for IronPython 2.6, at least.
Jeff Hardy