我在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");
任何帮助都将不胜感激。
答案 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无法从操作系统的文件系统上的任何位置读取,因为它需要在每个人的计算机上工作:)