在经典库中使用类时,IronPython返回错误的类型

时间:2010-07-22 04:32:18

标签: c# ironpython

有人可以推荐一个针对这个铁心虫病的解决方法吗?

我有一个包含在外部类库中的类。我在嵌入式ironpython实例中使用了这个类。当我的c#app从范围中检索到类时,这些类似乎不匹配!

我的python脚本:

import sys
import clr
from ExternalAssembly import *
from IronPythonBug import *

internalClass = InternalClass("internal")
externalClass = ExternalClass("external")

我的c#app:

internalClass = scope.GetVariable("internalClass");
externalClass = scope.GetVariable("externalClass");

if (internalClass is InternalClass)
    Console.WriteLine("IternalClass matches");
else
    Console.WriteLine("Error: InternalClass does not match");

if (externalClass is ExternalClass)
    Console.WriteLine("ExternalClass matches");
else
    Console.WriteLine("Error: ExternalClass does not match");

控制台输出:

IternalClass matches
Error: ExternalClass does not match

随时下载一个说明此错误的项目: http://www.virtual-chaos.net/zip/IronPythonBug.zip

2 个答案:

答案 0 :(得分:6)

这是由CLR加载器上下文引起的。对Assembly.LoadFile的调用将程序集的另一个副本加载到不同的上下文中 - 为您提供一组重复但具有不同身份的类型。而不是使用Assembly.LoadFile来获取程序集对象使用typeof(ExternalClass).Assembly。

答案 1 :(得分:0)

执行externalClass.GetType()并检查属性。

看到InternalClass也来自同一个程序集,将该类型与上面的类型进行比较。