Case 360
Потратил несколько часов на решение проблемы, возникшей на ровном месте. А именно. Есть код типа следующего:
Type type = null;
foreach(Assembly next in AppDomain.CurrentDomain.GetAssemblies())
{
// здесь какие-то проверки, результатом которых является
// заполнение переменной type
}
object obj = Activator.CreateInstance(type);
BaseType bt = (BaseType)obj; // *
// * - надо заявить, что Type является потомком BaseType
И вот, при выполнении // * происходит забавная вещь: исключение "Specified cast is not valid." Забавность этой вещи заключается в том, что возникает это исключение только при выполнении "большого проекта", в случае теста ошибка не воспроизводится. Причины мне до сих пор неизвестны, хотя есть подозрения, что происходит обращение к разным версиям сборки. Чтобы обойтись без приведения, пришлось использовать reflection, который оказался как раз к месту:
object sp = Activator.CreateInstance(type);
type.InvokeMember("LoadConfig", BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public, null, sp, null);
Исследования продолжаются. Система сообщения об ошибках, имеющаяся в .NET 1.1 является одной из самых бессмысленных из всех, что я только видел. Это очевиднейший пережиток "времён позднего DCOM", тратить время на борьбу с которым лично мне - жалко.
Комментариев нет:
Отправить комментарий