![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| VisualProgrammerNET |
|
||||||||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
Есть некая сборка под названием BaseLocation. Код (всё лишнее вырезал):
Интерфейс определён в другой сборке, под названием Globals (в BaseLocation есть референс на Globals, само собой). Код:
Обе сборки лежат на харде. Пишу программу, которая сканирует папку (в ней пока только BaseLocation.dll) на лежащие в ней .dll, и проверяет, являются ли они подходящими. Написал вот что:
Всё обламывается на строчке Type baseloc = asmb.GetType("BaseLocation.BaseLocation"). Вылетает ошибка, что интерфейс ICreat3BaseLocation не может быть загружен из сборки Globals. Пробовал загрузить его отдельно,
, не загружается. Я добавил референс на Globals.dll - всё равно ничего не работает... Это сообщение отредактировал(а) VisualProgrammerNET - 16.5.2006, 17:44 -------------------- 3 ГОДА НА |
||||||||
|
|||||||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Учись работать с дебугом. Запускаешь Immediate и пишешь
Погляди, какие там типы и их имена. Из них делай выводы, что не так. |
|||
|
||||
| VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
Immediate - это чо?
-------------------- 3 ГОДА НА |
|||
|
||||
| arilou |
|
||||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
Чтобы заюзать такой тип через GetType, надо написать qualified type name:
Т.е.
Вопрос в том, нафига запихивать определение интерфейса внутрь класса, имя которого совпадает с именем namespace'а |
||||
|
|||||
| VisualProgrammerNET |
|
||||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
Ммм... но ведь исключение вылетат на строке
BaseLocation только реализует интерфейс, но не является таковым. Зачем вообще этому классу понадобился интерфейс? И куда мне сувать этот самый Qualified type name? -------------------- 3 ГОДА НА |
||||
|
|||||
| VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
Нашёл проблему. Оказывается, загружал недоработанную версию сборки, не поддерживающую интерфейс
-------------------- 3 ГОДА НА |
|||
|
||||
| VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
Теперь такой вопрос. Мне в проекте известен тип BaseLocation. Я, вышеизложенным путём, проверяю, есть ли в исследуемой сборке этот тип. Если получаю ответ "да", то надо создать экземпляр BaseLocation из этой сборки и добавить его в список. Но вся проблема в том, что - явно или неявно - нельзя привести тип Type к известному BaseLocation. Есть ли какие-нибудь способы создать список или массив объектов, загруженных динамически? В данном случае, массив BaseLocation.
-------------------- 3 ГОДА НА |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 25 Всего: 173 |
VisualProgrammerNET, не совсем понял. Ты хочешь из экземпляра Type получить экземпляр типа, который он описывает? См. Activator.CreateInstance.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
Не, смотри. У меня в проекте объявлен тип BaseLocation. Есть типизированный список List <BaseLocation>. Я программно загружаю сборку, содержащую так же этот тип. Но вся проблема в том, что
Type baseloc = asmb.GetType("BaseLocation.BaseLocation"); (BaseLocation)object obj = (BaseLocation)Activator.CreateInstance(baseloc); работать не будет. Вылетает исключение "не удалось привести тип BaseLocation к типу BaseLocation. Почему не удаётся? -------------------- 3 ГОДА НА |
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
VisualProgrammerNET, потому что сборки ссылаются на разные типы BaseLocation - либл находящиеся в разных сборках, либо в разных неймспейсах!
|
|||
|
||||
| VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
А можно как-нить всё таки привести один тип к другому?
Это сообщение отредактировал(а) VisualProgrammerNET - 22.5.2006, 16:58 -------------------- 3 ГОДА НА |
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
VisualProgrammerNET, нельзя. Ты объясни, зачем?? Проблема-то явно в другом.
|
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Архитектуру покажи. Чую я, что-то не то ты замутил
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |