IronPython“无法导入名称ClassName”
问题描述:
我正在使用IronPython从我的C#应用程序执行python脚本。我想让脚本访问我的C#类以及一些用于从脚本创建表单的System类。以下是python脚本内完成进口:IronPython“无法导入名称ClassName”
import clr
clr.AddReference('MyApp')
from MyApp import MyClass
我从C#执行脚本如下:
ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = engine.CreateScope();
engine.ExecuteFile(Directory.GetCurrentDirectory()+"/python/test.py", scope);
程序无法在此行我的脚本,返回“无法导入名为MyClass “:
from MyApp import MyClass
我的文件层次结构是这样的:
root folder
-MyApp.exe
-python
-test.py
该程序没有添加引用到我的.exe文件的麻烦,但它不会加载类。更重要的是令人费解的是,这个工程:
import MyApp
是上述线路输入我的名字空间,也命名为“MyApp的”,从我的组装,“MyApp的”?我试图从命名空间MyApp中删除MyClass,但这没有改变。我尝试将MyApp建立为.dll并将其插入到根目录和脚本目录中,但即使经过长时间的互联网搜索,也没有任何成效。
为什么IronPython不能找到MyClass?为什么它能够成功地从MyApp导入MyApp,并且在发生这种情况时它究竟在做什么?
MyClass.cs:
// Omitted "using" statements
namespace MyApp{
class MyClass{
public static void MethodIWantToUse(){}
}
}
答
通过一些调查研究,我设法找到这篇文章它帮助我解决我的问题:Accessing C# class members in IronPython
MyClass的是与隐含的默认“内部”的可见性定义,所以它对我的程序集外部的python脚本是不可见的。更改为MyClass可见性为“公共”,例如:
namespace MyApp{
public class MyClass{
public static void MethodIWantToUse(){}
}
}
...让我通过键入导入类为我的python脚本:从命名空间MyApp的,
from MyApp import MyClass
因此进口MyClass的这包含在MyApp程序集中。
(我还了解到“import MyApp”正在从我的程序集中导入名称空间MyApp,它碰巧具有相同的名称。)