Есть проблемка:
Unable to cast object of type 'SomeNameSpace.SomeClass' to type 'SomeNameSpace.SomeClass'.
т.е. получается эксепшн. Код используется в гуе, в тестововм проекте — все работает нормально.
Вот примерный код:
public static SomeClass processXML(XmlDocument doc)
{
XmlSerializer ser = new XmlSerializer(typeof(SomeClass));
XmlElement elem = doc.DocumentElement;
using (XmlNodeReader reader = new XmlNodeReader(elem))
{
return (SomeClass) ser.Deserialize(reader);
}
}
GetType() == typeof(SomeClass);
т.е. экземпляр класса вроде нормальный, но вот не возвращается
в чем дело — никак не пойму
Здравствуйте, VadimB, Вы писали:
VB>Есть проблемка: Unable to cast object of type 'SomeNameSpace.SomeClass' to type 'SomeNameSpace.SomeClass'.
VB>в чем дело — никак не пойму
[skipped]
99% в том что:
typeof(SomeClass).Assembly.CodeBase != ser.Deserialize(reader).GetType().Assembly.CodeBase
Здравствуйте, V.Petrovski, Вы писали:
VP>Здравствуйте, VadimB, Вы писали:
VB>>Есть проблемка: Unable to cast object of type 'SomeNameSpace.SomeClass' to type 'SomeNameSpace.SomeClass'.
VB>>в чем дело — никак не пойму
VP>[skipped]
VP>99% в том что:
VP>VP>typeof(SomeClass).Assembly.CodeBase != ser.Deserialize(reader).GetType().Assembly.CodeBase
VP>
Да, действительно, для одного типа .dll, а для другого — .DLL
И как с этим можно побороться?
Здравствуйте, VadimB, Вы писали:
VB>Да, действительно, для одного типа .dll, а для другого — .DLL
VB>И как с этим можно побороться?
Всё зависти от того что там с этими сборками делаешь, но обычно юзаются следующие решения:
1. Сделать так чтобы загружалась одна и также сборка, чтобы CodeBase были равные
2. Как одно из решений первого, поместить сборку в GAC
3. Сдалать интерфейс, вынести его в общую сборку и поместить её в GAC.
Здравствуйте, VadimB, Вы писали:
VB>в чем дело — никак не пойму
Столкнувшись в очередной раз, нашел причину: сборки грузились через LoadFile, а не LoadFrom... Вот такая злобная бага из-за разницы в 3 буквы