Srivatsn Narayanan wrote:
Also Assembly.Load is not sufficient to be able to import the compiled code. A 
clr.AddReference needs to be done which publishes the module. The easiest way 
to do that is include it in the string as Michael pointed out.


Doesn't runtime.LoadAssembly do this?

Michael

ScriptSource source = engine.CreateScriptSourceFromString("import 
clr;clr.AddReference(\"test.dll\");import test", SourceCodeKind.Statements);

You might need to add the current folder to the path as well before the 
clr.AddReference.

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Michael Foord
Sent: Tuesday, August 26, 2008 3:12 PM
To: [EMAIL PROTECTED]; Discussion of IronPython
Subject: Re: [IronPython] Loading DLL from pyc.py into ScriptEngine

hellosticky wrote:
I also tried:

            Assembly assembly = Assembly.Load(AssemblyName);
            ScriptRuntime runtime = ScriptRuntime.Create();
            runtime.LoadAssembly(assembly);
            ScriptScope scope = runtime.ExecuteFile("test.py");
            object o = scope.Execute(null);

But that threw a script not found exception saying it could find the source 
file for test.py, so it would seem like this wants to recompile it


-----Original Message-----
From: hellosticky [mailto:[EMAIL PROTECTED]
Sent: Tuesday, August 26, 2008 5:52 PM
To: IronPython
Subject: Loading DLL from pyc.py into ScriptEngine

Hi,

I created an IronPython DLL with "ipy.exe pyc.py /out:test
/target:dll test.py" which created test.dll. Now, from C#,
I'd like to execute test.py from test.dll. I just opened up
dlr-spec-hosting and there's a CreateScriptSourceFromStream,
but I don't see that in 2.0 Beta 4 bits. Here is where I'm
stuck. How do I get that assembly into the engine and then
execute test.py?

Well - the easiest way is to execute 'import test' after having added
the assembly. This should execute the code in order to create a module.

ScriptScope scope = engine.CreateScope();
ScriptSource source = engine.CreateScriptSourceFromString("import test",
SourceCodeKind.Statements);
engine.Execute(scope);

There is an API for setting a stream as stdout on an engine -
'runtime.IO.SetOutput'.

Michael

 Also, I'd like to get the output into a
string (I guess I can just redirect Console.Out?)

public string Execute(string assemblyName)
{
    string content = null;

    Assembly assembly = Assembly.Load(assemblyName);
    ScriptRuntime runtime = ScriptRuntime.Create();
    ObjectOperations operations = runtime.CreateOperations();
    ScriptEngine engine = runtime.GetEngine("py");
    // magic..

    return content;
}

Thanks,

_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com



--
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/
http://www.trypython.org/
http://www.ironpython.info/
http://www.theotherdelia.co.uk/
http://www.resolverhacks.net/

_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com


--
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/
http://www.trypython.org/
http://www.ironpython.info/
http://www.theotherdelia.co.uk/
http://www.resolverhacks.net/

_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to