Thanks,
But I tried the new version named IronPython-40877.zip, the problem
still exists. Is this version fixed?
And I tried to use ScriptRuntime.LoadAssembly
--------------------------------
_runtime.LoadAssembly(System.Reflection.Assembly.LoadFile(@"E:\Source
\IronPython_Main\Src\PyDemo\bin\Debug\demo.dll"));
//_engine.SetSearchPaths(new string[] { @"E:\Source
\IronPython_Main\Src\PyDemo\bin\Debug" });
_source =
_engine.CreateScriptSourceFromString("import demo",
Microsoft.Scripting.SourceCodeKind.Statements);
_source.Execute(_scope);
--------------------------------
I got an IronPython.Runtime.Exceptions.ImportException. {"No module
named demo"}
Is my code wrong?
Best Regards
Yongming
On Sep 30, 8:01 am, Dino Viehland <[EMAIL PROTECTED]> wrote:
> My guess is you're hitting a bug I already have a fix for. What's probably
> happening is we're burning the SymbolID into the compiled code and then when
> you run it we have the value inappropriately associated with the wrong
> string. This should be fixed in the latest sources which were just pushed up
> today.
>
> Also in RC1 ScriptRuntime.LoadAssembly will effectively do the load for you
> and then a simple "import mymodulename" should work although maybe you don't
> want to do compile & run the import.
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Yongming Wang
> Sent: Monday, September 29, 2008 4:33 PM
> To: [EMAIL PROTECTED]
> Subject: [IronPython] How to run ScriptCode from ScriptCode.LoadFromAssembly?
>
> I want to save the ScriptCode to assembly, load and run it next time.
> I tried 3 ways, but all failed.
>
> 1. Here is my code
> ---------------------------------------------------
>
> public void RunScript(string script)
> {
> try
> {
> if (!System.IO.File.Exists(@"E:\Source
> \IronPython-2.0B5\Src\PyDemo\bin\Debug\demo.dll"))
> {
> _source =
> _engine.CreateScriptSourceFromString(script,
> Microsoft.Scripting.SourceCodeKind.Statements);
> _binary = _source.Compile();
> ScriptCode code =
> HostingHelpers.GetScriptCode(_binary);
> List<ScriptCode> codes = new List<ScriptCode>();
> codes.Add(code);
> ScriptCode.SaveToAssembly("demo.dll",
> codes.ToArray());
> _binary.Execute(_scope);
> }
> else
> {
> ScriptCode[] codes =
> ScriptCode.LoadFromAssembly(HostingHelpers.GetDomainManager(_runtime),
> System.Reflection.Assembly.LoadFile(@"E:\Source
> \IronPython-2.0B5\Src\PyDemo\bin\Debug\demo.dll"));
> if (codes != null && codes.Length >= 1)
> {
> OptimizedScriptCode optimizedCode =
> (OptimizedScriptCode)codes[0];
> Scope scope = optimizedCode.CreateScope();
> this._mainForm.setScope(scope); //
> SetObjectName "Button1" etc.
> optimizedCode.Run(scope);
> }
> }
> }
> catch (System.Exception ex)
> {
> }
> }
> ----------------------------------------------------------------------------
> -----------------------------
> As you can see, ScriptCode.SaveToAssembly was execute succesfully.
> And ScriptCode.LoadFromAssembly successfully returned.
> But when I got exception when I run it.
> I got Microsoft.Scripting.Runtime.UnboundNameException
> {"name 'Button1' is not defined"}
> But I have set the object name to the scope. I don't know why.
>
> 2. If I use another ScriptScope _scope, e.g.
> -------------------------------------
> OptimizedScriptCode optimizedCode = (OptimizedScriptCode)codes[0];
> optimizedCode.Run(HostingHelpers.GetScope(_scope));
> --------------------------------------------------
> I got System.NullReferenceException because code is null in the
> following function of OptimizedScriptCode.cs
> ---------------------------------------------------
> protected override object InvokeTarget(LambdaExpression code,
> Scope scope) {
> if (scope == _optimizedScope) {
> return _optimizedTarget(scope, LanguageContext);
> }
>
> // new scope, compile unoptimized code and use that.
> if (_unoptimizedTarget == null) {
> // TODO: fix generated DLR ASTs - languages should
> remove their usage
> // of GlobalVariables and then this can go away.
> code = new GlobalLookupRewriter().RewriteLambda(code);
>
> _unoptimizedTarget =
> code.Compile<DlrMainCallTarget>(SourceUnit.EmitDebugSymbols);
> }
>
> return _unoptimizedTarget(scope,
> LanguageContext);
> }
> -------------------------------------------------------
>
> 3. If I modified the InvokeTarget function to
> if (scope == _optimizedScope || code == null)
> I got System.InvalidCastException.
> Cann't convert Microsoft.Scripting.Runtime.SymbolDictionary to
> Microsoft.Scripting.Runtime.GlobalsDictionary.
> I don't know why this convertion wass needed.
>
> Could anyone give a help?
> Thanks.
> Yongming
>
> _______________________________________________
> Users mailing list
> [EMAIL PROTECTED]://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> _______________________________________________
> Users mailing list
> [EMAIL PROTECTED]://lists.ironpython.com/listinfo.cgi/users-ironpython.com
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com