Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2011, 13:36   #1
Saimon2k
Новичок
Джуниор
 
Регистрация: 14.06.2011
Сообщений: 1
По умолчанию Динамическая компиляция и вызов из сборки

Доброе время суток.
Хотелось бы реализовать динамическую компиляцию, но столкнулся с проблемой.
Руководствовался этой и этой темами. Суть проблемы вот в чем - при запуске метода из dll не проходит преобразование типа, более того, складывается ощущение, что это совсем другие классы.
Вот так я подгружаю dll и запускаю метод Run
Код:
Assembly assembly = Assembly.LoadFile(fn);
            Type type = assembly.GetType("TestInvoke.Runner");
            MethodInfo method = type.GetMethod("Run");

            ConstructorInfo ctor = type.GetConstructor(Type.EmptyTypes);
            object r = ctor.Invoke(null);

            object[] param = { new Class01() };

            try
            {
                method.Invoke(r, param); // вызов метода с входным параметром
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
Код:
class Class0 { ... }
class Class01 : Class0 { ... }
Exception: Невозможно преобразовать объект типа "TestInvoke.Class01" к типу "TestInvoke.Class0".

Вот проектик - http://depositfiles.com/files/0wbgghvr7
Saimon2k вне форума Ответить с цитированием
Старый 14.06.2011, 19:54   #2
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

Ошибка потому, что Class0 у Вас объявлен в библиотеке, а в Invoke Вы пытаетесь передать тип из текущей сборки.
Вместо:
Код:
object[] param = { new Class01() };
Вот так будет правильно:
Код:
            object myClass01 = Activator.CreateInstance(assembly.GetType("TestInvoke.Class01"));

            object[] param = { myClass01 };

Последний раз редактировалось Spawn™Production®; 14.06.2011 в 19:57.
Spawn™Production® вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматизация сборки C# Project ds.Dante Общие вопросы .NET 3 14.10.2011 11:07
Динамическая компиляция проекта с Winform shaman4k Общие вопросы .NET 1 23.11.2010 18:18
Создание сборки maxam4 Операционные системы общие вопросы 1 10.11.2010 16:05
Алгоритм сборки компьютера samouelson Компьютерное железо 2 26.09.2010 16:24
Сборки Windows Bearw08 Windows 20 30.03.2009 00:38