IronPython "cannot import name ClassName"
IronPython "cannot import name ClassName"
我正在使用 IronPython 从我的 C# 应用程序执行 python 脚本。除了一些用于从脚本创建表单的系统 classes 之外,我还希望脚本访问我的 C# classes。以下是在 python 脚本中完成的导入:
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);
程序在我脚本的这一行失败,返回 "Cannot import name MyClass":
from MyApp import MyClass
我的文件层次结构如下所示:
root folder
-MyApp.exe
-python
-test.py
程序可以毫无问题地添加对我的 .exe 文件的引用,但不会加载 class。更令人费解的是这有效:
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 是使用隐式默认 "internal" 可见性定义的,因此它对我的程序集外部的 python 脚本不可见。将 MyClass 的可见性更改为 "public",如下所示:
namespace MyApp{
public class MyClass{
public static void MethodIWantToUse(){}
}
}
...允许我通过键入以下内容将 class 导入到我的 python 脚本中:
from MyApp import MyClass
从而从命名空间 MyApp 导入 MyClass,它包含在 MyApp 程序集中。
(我还了解到 "import MyApp" 正在从我的程序集中导入名称空间 MyApp,它恰好具有相同的名称。)
我正在使用 IronPython 从我的 C# 应用程序执行 python 脚本。除了一些用于从脚本创建表单的系统 classes 之外,我还希望脚本访问我的 C# classes。以下是在 python 脚本中完成的导入:
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);
程序在我脚本的这一行失败,返回 "Cannot import name MyClass":
from MyApp import MyClass
我的文件层次结构如下所示:
root folder
-MyApp.exe
-python
-test.py
程序可以毫无问题地添加对我的 .exe 文件的引用,但不会加载 class。更令人费解的是这有效:
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 是使用隐式默认 "internal" 可见性定义的,因此它对我的程序集外部的 python 脚本不可见。将 MyClass 的可见性更改为 "public",如下所示:
namespace MyApp{
public class MyClass{
public static void MethodIWantToUse(){}
}
}
...允许我通过键入以下内容将 class 导入到我的 python 脚本中:
from MyApp import MyClass
从而从命名空间 MyApp 导入 MyClass,它包含在 MyApp 程序集中。
(我还了解到 "import MyApp" 正在从我的程序集中导入名称空间 MyApp,它恰好具有相同的名称。)