在(铁)Python脚本中引用宿主程序集失败

问题描述:

我目前正在测试IronPython(我知道有点C#和一点CPython)。现在我想在Python脚本中使用我的自定义类。在(铁)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. 当添加到工作目录或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. 当添加到工作目录或sys.path中使用相对路径,或使用AddReferenceToFile:没有模块名为IPTest
+0

我要疯了。 ..我试过'clr.AddReferenceToFile(r“IPTest.exe”)'(与“比”) - 这是行不通的,但是当使用'一切都运行平稳。 – marce