IronPython возвращает неправильный тип при использовании класса в классной библиотеке - PullRequest
3 голосов
/ 22 июля 2010

Может кто-нибудь порекомендовать обходной путь для этой ошибки Ironpython?

У меня есть класс, содержащийся во внешней библиотеке классов.Я использую этот класс во встроенном экземпляре Ironpython.Когда мое приложение c # извлекает класс из области видимости, классы, похоже, не совпадают!

Мой скрипт на python:

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

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

Моё приложение на c #:

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 ]

6 голосов
/ 22 июля 2010

Это вызвано контекстом загрузчика CLR.Вызов Assembly.LoadFile загружает другую копию сборки в другой контекст, предоставляя вам дублированный набор типов, но с разными идентификаторами.Вместо использования Assembly.LoadFile для получения объекта сборки используйте typeof (ExternalClass) .Assembly.

0 голосов
/ 22 июля 2010

Сделайте externalClass.GetType() и проверьте свойства.

Если вы видите InternalClass также из той же сборки, сравните этот тип с вышеуказанным.

...