You can manually provide the search paths: Dictionary<string, object> options = new Dictionary<string, object>(); options["SearchPaths"] = new [] { ".", "C:\\SomeDirectory\\DLLs", "C:\\SomeDirectory\\Libs" }; ScriptEngine engine = Python.CreateEngine(ad, options);
I don't know of a way to set the entry assembly other than via starting an .EXE Normally. > -----Original Message----- > From: users-boun...@lists.ironpython.com [mailto:users- > boun...@lists.ironpython.com] On Behalf Of mohammad mustaq > Sent: Friday, August 20, 2010 5:16 AM > To: Discussion of IronPython > Subject: [IronPython] "GetSearchPaths" does not return the default directories > when run in a new Appdomain > > Hi, > > When I create a python engine in a new Appdomain the "GetSearchPaths" > method return only the current directory. In default domain it returns > "Lib" as well as "Dll" directory in IronPython 2.6.1. Is there a way > to get these search paths while the engine is created in a new > Appdomain. > > The reason being that the domain manager of the new Appdomain does not > have any information regarding the "EntryAssembly". Is there a way to > get the data in the Host's domain manager to the new Appdomain's > domain manager. I have provided a code illustrating this. > > > using System; > using Microsoft.Scripting; > using IronPython.Hosting; > using Microsoft.Scripting.Hosting; > using System.Runtime.Remoting; > using System.Runtime.Remoting.Lifetime; > > class Foo > { > public static void Main(string[] args) > { > AppDomain ad = AppDomain.CreateDomain("foo"); > ScriptEngine engine = Python.CreateEngine(ad); > engine.Runtime.LoadAssembly(typeof(MbrBase).Assembly); > > ScriptSource code = engine.CreateScriptSourceFromString(@" > import MbrBase > class C(MbrBase): > def Test_C(self, log): > print 0 > a = C() > ", SourceCodeKind.Statements); > > ScriptScope scope = engine.CreateScope(); > > code.Execute(scope); > > Console.WriteLine("Trying to do it... {0}", > AppDomain.CurrentDomain.Id); > MbrBase mbr = (MbrBase)scope.GetVariable("a"); > > string isSubClassCode = String.Format("issubclass({0},{1})", > "C", "MbrBase"); > ScriptSource script = > engine.CreateScriptSourceFromString(isSubClassCode, > SourceCodeKind.Expression); > > ICollection<string> paths = engine.GetSearchPaths(); // It > returns only current directory. > > bool result = (bool)script.Execute(scope); > > if (result == true) > { > ObjectOperations ops = engine.Operations; > ObjectHandle subClass = scope.GetVariableHandle("C"); > // get back a handle > ObjectHandle instance = ops.Call(subClass, new > ObjectHandle[0]); // invoke the handle to create an instance > mbr = instance.Unwrap() as MbrBase; // now we know we > have an MBR and we can unwrap it to our local side > > ObjectHandle temp = ops.GetMember(instance, "Test_C"); > object log = null; > ops.Call(temp, log); > } > > mbr.DoItVirtually(); > mbr.DoIt(); > Console.ReadKey(); > } > } > > public class MbrBase : MarshalByRefObject > { > public virtual void DoItVirtually() > { > Console.WriteLine("Did it virtually {0}", AppDomain.CurrentDomain.Id); > } > > public void DoIt() > { > Console.WriteLine("Did it {0}", AppDomain.CurrentDomain.Id); > } > } > > thanks, > Mustaq > _______________________________________________ > Users mailing list > 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