c# - 在 (Iron)Python 脚本中引用托管程序集失败

标签 c# ironpython

我目前正在测试 IronPython(我懂一点 C# 和一点 CPython)。现在我想在 Python 脚本中使用我的自定义类。

我有以下项目结构:

Solution IPTest
---Project IPTest
------Namespace IPTest
---------Program class (main)
---------Elem class
------Scripts
---------Worker.py

Elem 是一个简单的地方:

public class Elem {
    public string Name;
}

我可以在 .NET 程序中使用 Python 脚本,没有任何问题,例如:

ScriptEngine engine = Python.CreateEngine();
ScriptSource source = engine.CreateScriptSourceFromFile("./Scripts/Worker.py");
ScriptScope scope = engine.CreateScope();
source.Execute(scope);
// or var worker = Python.CreateRuntime().UseFile("./Scripts/Worker.py");
dynamic Worker = scope.GetVariable("Worker");
dynamic worker = Worker();
var res1 = worker.add(4, 5);

但是,我不知道如何在 Python 脚本中引用托管程序集。经过一些研究,我尝试了以下方法:

import sys
import System
sys.path.append(System.IO.Directory.GetCurrentDirectory()) #make sure assembly dir is  in sys.path
import clr
clr.AddReference(“IPTest.exe”)
# or clr.AddReferenceToFile(r"IPTest.exe")
# or clr.AddReference(r"<fullpath>\IPTest\bin\Debug\IPTest.exe")
# or clr.AddReference(“../IPTest.exe”) #when not adding workingdir to sys.path
from IPTest import Elem
# or from IPTest.IPTest import Elem
# or import Elem

两者都不起作用。我收到两条不同的错误消息:

  1. 将 workingdir 添加到 sys.path 或使用相对路径或使用 AddReferenceToFile: 没有名为 IPTest 的模块
  2. 使用绝对路径时:给定的程序集名称或代码库 无效。 (HRESULT 异常:0x80131047)

我检查了程序集名称是否真的是 IPTest 并尝试使用 dll 而不是 exe - 虽然它通常应该没有任何区别而且令人惊讶的是它也不起作用。

免责声明:解决方案描述here :

engine.Runtime.LoadAssembly(Assembly.GetExecutingAssembly()); //in c#
from IPTest import Elem # in python script

工作正常。但是我认为它也应该通过在脚本文件中引用来工作(这样会更好)。

可能我遗漏了一些明显的东西,但我就是看不到它,所以非常感谢任何提示。

最佳答案

按照错误中的说明尝试 clr.AddReferenceToFile(r'IPTest.exe'):

  1. 将 workingdir 添加到 sys.path 或使用相对路径或使用 AddReferenceToFile: No module named IPTest

关于c# - 在 (Iron)Python 脚本中引用托管程序集失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12641269/

相关文章:

c# - 将 Azure SDK 从 2.4 升级到 2.6 后生成错误

c# - C# volatile 变量:内存隔离VS。快取

asp.net - 使用 IronPython 调用带参数的 Python 脚本 - "Need more than x values to unpack"

python - .NET 和 Python 通过 IronPython 互操作

c# - 使用 ref 或 out 参数编写 iron python 方法

c# - 为什么我的论点似乎被 vhost.exe 覆盖了

c# - 使用 C# 从 facebook 获取 FB 页面数据

c# - 如何使用 session 将 LINQ 查询结果发送到另一个页面?

python - 如何卸载 IronPython 工具?

.net - 如何在IronPython中创建Web服务?