gpt4 book ai didi

c# - 在 C# Web 应用程序中嵌入 IronPython 2 的问题

转载 作者:太空狗 更新时间:2023-10-30 00:47:31 26 4
gpt4 key购买 nike

首先介绍一些背景知识(以防有帮助):

我的应用程序是最近升级到 .Net Framework v3.5 的基于 Web 的框架,但不使用母版页/用户控件系统。它更类似于 MVC 模式(虽然更老)并且从模板的响应流中输出纯 HTML。 Python 表达式允许实现一些规则和模板变体。

老办法

在 C# 中嵌入 IronPython 1.x 引擎时,我们能够执行如下代码:

PythonEngine pe = new PythonEngine();
Assembly a = Assembly.LoadFile("path to assembly");
pe.LoadAssembly(a);
pe.Import("Script");

ipy 2.0 中没有 Import() 方法,而且 ImportModule() 方法似乎也不一样。 Import() 减少了在我们编写的每个 python 脚本中添加一行的需要,例如:

from MyAssembly import MyClass

MyClass 充满静态方法这一事实意味着对 MyClass.MyMethod() 的调用非常有效。我不能只实例化一个对象并将其分配给范围内的变量,因为包含 MyClass 的程序集是在运行时动态加载的。

现在进入正题

我已经整理了 IronPython 2.0 集成的所有其他部分,但不想要求我的实现者在他们编写的每个脚本的顶部键入“from MyAssembly import MyClass”(在没有必要的时候看起来很愚蠢在 ipy 1.x 中)并且可能在一段时间内也是一个支持问题。

最后是问题

有人遇到过这个问题并解决了吗?我是否以错误的方式为 DLR 做事?还是我遗漏了一些明显的东西?

我不确定有人需要提供帮助的详细信息,但我希望这就足够了。

最佳答案

程序集加载后,您可以在用于运行脚本的 Scope 中执行导入:

ScriptEngine engine = Python.CreateEngine();
engine.Runtime.LoadAssembly(a);
string code = "from MyAssembly import MyClass";
ScriptSource source = engine.CreateScriptSourceFromString(code, "<import>", SourceCodeKind.Statements);
CompiledCode c = source.Compile();

Scope scope = engine.CreateScope();
c.Execute(scope);

// then run your script in the same scope

我们在我们的产品中做了类似的事情。

(希望这是有效的 C# - 我实际上在 IronPython 中尝试过它,因为它更方便。)

关于c# - 在 C# Web 应用程序中嵌入 IronPython 2 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/471814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com