У меня есть сборка, которая содержит класс RD_ToBeProcessed, который наследуется от ToBeProcessed.Классы находятся в отдельных сборках.
Я загружаю объект, используя createInstance, а затем пытаюсь привести его к следующему коду:
private Type tbpType = null;
public ToBeProcessed getToBeProcessedObject(string data)
{
// The data is passed in so that the fields are populated with the
// correct data.
if (tbpType==null){
Assembly assembly =
Assembly.LoadFrom("c:\\project\\RD_ToBeProcessed.dll");
tbpType = assembly.GetType("myNameSpace.RD_ToBeProcessed");
}
Object tbp = Activator.CreateInstance(tbpType,data);
// This line throws an error
return (ToBeProcessed)tbp;
}
Это повтор вопроса .NET: Невозможно привести объект к интерфейсу, он реализует , но я не знаю, как его разрешить.
Выдается ошибка:
Невозможно привести объект типа 'myNameSpace.RD_ToBeProcessed 'для ввода' myNameSpace.ToBeProcessed '.
Принятый ответ показал, что проблема заключалась в 2 разных версиях базовой сборки.Но я использовал ILSpy и оба библиотеки ToBeProcessed в каталоге приложения и тот же каталог, что и отчет RD_ToBeProcessed:
ToBeProcessed, версия = 1.0.4336.31676, Culture = нейтральный, PublicKeyToken = null
Так что я не уверен, что делаю не так.Должен ли я изменить ToBeProcessed на интерфейс (ItoBeProcessed), который используется в приложении и плагине?Тогда есть отдельная сборка, которая содержит базовый класс ToBeProcessed, на который приложение вообще не будет ссылаться (только плагин by)?
РЕДАКТИРОВАТЬ: проблема была решена с помощью интерфейсного класса.Я до сих пор не знаю, что пошло не так, но ответ Кола показал, что в теории это должно было работать правильно, как было.