在SL中托管IronPython时无法导入第三方模块

时间:2009-09-10 04:38:01

标签: silverlight silverlight-3.0 ironpython

我在SL应用程序中托管Python。基本上我有一个附加属性,允许你传递Python脚本,然后在元素的丢失焦点事件上执行。

只要我不需要任何第三方导入,IPY集成就可以正常工作。我将formencode包复制到Program Files \ Iron Python下的site-packages文件夹...然后尝试使用ScriptEngine.ImportModule和inline以编程方式导入formencode。在每种情况下都找不到该模块。

我的DLR主机设置代码如下:

        var setup = new ScriptRuntimeSetup();
        setup.HostType = typeof(BrowserScriptHost);
        setup.LanguageSetups.Add(Python.CreateLanguageSetup(null));
        setup.Options["SearchPaths"] = new string[] { string.Empty };

        _runtime = new ScriptRuntime(setup);
        _engine = _runtime.GetEngine("Python");
        _scope = _engine.CreateScope();
        _engine.ImportModule("formencode");

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我还没有尝试过这样做,但我确实发现要包含第三方程序集(在我的情况下是更粗糙的物理引擎)我必须将程序集包含在XAP中并在App.manifest中引用它。 / p>

但真正引起我注意的是我必须使用其强名称引用程序集(我只需要在SL中执行,本地我可以使用程序集名称)。

希望这会有所帮助,我很有兴趣看看你最终如何解决它。

答案 1 :(得分:1)

您拥有的DLR托管代码看起来不错,但您放置formencode的地方是错误的:

  

我将formencode包复制到Program Files \ Iron Python

下的site-packages文件夹

setup.HostType = typeof(BrowserScriptHost)行导致IronPython在XAP文件中查找所有文件系统操作,包括“import”。您需要将formencode.py复制到主机的Silverlight项目中,并确保将“Copy Local”设置为“True”,这样它才能进入XAP。然后导入它将起作用。

这是预期的,因为Silverlight无法从操作系统的文件系统上的任何位置读取,因为它需要在每个人的计算机上工作:)