Загрузка dll-внутри плагина

Автор Тема: Загрузка dll-внутри плагина  (Прочитано 9985 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Добрый вечер! Такой вопрос.
В своем плагине я использую много вспомогательных dll(как управляемых, так и нативных).
Я хочу чтобы всё находилось в одной папке (dll плагина и вспомогательные dll).
C:\Program Files\Autodesk\Navisworks Manage 2019\Plugins\MyPlugin.
Но по умолчанию Нэвис ищет все вспомогательные dll в своем корневом каталоге.
Как мне это изменить?
Внутри метода Execute не получается, потому что исключение выбрасывается раньше его первой команды.
Спасибо.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Загрузка dll-внутри плагина
« Ответ #1 : 05-06-2020, 23:28:09 »
Внутри метода Execute не получается, потому что исключение выбрасывается раньше его первой команды.
В какой момент выбрасывается исключение?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Re: Загрузка dll-внутри плагина
« Ответ #2 : 06-06-2020, 00:12:35 »
Я и сам не пойму. В сообщении написано, что оно в Autodesk.Navisworks.Api.dll.
До точки останова на первой команде метода Execute почему-то не доходит.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Загрузка dll-внутри плагина
« Ответ #3 : 06-06-2020, 00:15:27 »
Я и сам не пойму. В сообщении написано, что оно в Autodesk.Navisworks.Api.dll.
До точки останова на первой команде метода Execute почему-то не доходит.
Сообщение какое? Полностью текст и картинку.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Re: Загрузка dll-внутри плагина
« Ответ #4 : 06-06-2020, 00:32:21 »
Вот оно

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Загрузка dll-внутри плагина
« Ответ #5 : 06-06-2020, 10:52:23 »
На вскидку я вижу такое решение:
1. Пишешь плагин-заглушку, который выполняет следующие действия:
2. Находит каталог, в котором он размещен
3. Загружает все вспомогательные dll из каталога и основной плагин. Вполне возможно, что придётся подписаться на событие AssemblyResolve и написать свой обработчик для него: https://docs.microsoft.com/en-us/dotnet/standard/assembly/resolve-loads
4. Запускает метод Execute твоего основного плагина.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ivmax

  • ADN OPEN
  • **
  • Сообщений: 70
  • Карма: 3
Re: Загрузка dll-внутри плагина
« Ответ #6 : 13-10-2020, 09:59:11 »
Vladislav, подскажите, удалось ли вам решить вашу проблему, если да, то каким именно способом?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Загрузка dll-внутри плагина
« Ответ #7 : 13-10-2020, 10:40:41 »
ivmax,
Моей подсказки оказалось недостаточно?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ivmax

  • ADN OPEN
  • **
  • Сообщений: 70
  • Карма: 3
Re: Загрузка dll-внутри плагина
« Ответ #8 : 13-10-2020, 11:09:44 »
Александр,
вашу подсказку мне не удалось реализовать, потому что я не понимаю как это сделать :). Предположил что у Vladislavа есть готовое решение и возможно он им поделится.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Загрузка dll-внутри плагина
« Ответ #9 : 13-10-2020, 11:15:13 »
вашу подсказку мне не удалось реализовать, потому что я не понимаю как это сделать :).
Что именно не удалось понять?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ivmax

  • ADN OPEN
  • **
  • Сообщений: 70
  • Карма: 3
Re: Загрузка dll-внутри плагина
« Ответ #10 : 13-10-2020, 11:34:32 »
вашу подсказку мне не удалось реализовать, потому что я не понимаю как это сделать :).
Что именно не удалось понять?
п2. понятно;
п3. загрузка сборок, предполагаю, происходит методом LoadFrom. Как использовать AssemblyResolve я не понял;
п4. понял только сейчас, что нужно использовать Reflection, верно?



Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Загрузка dll-внутри плагина
« Ответ #11 : 13-10-2020, 11:42:13 »
п3. загрузка сборок, предполагаю, происходит методом LoadFrom. Как использовать AssemblyResolve я не понял;
Вот приблизительно так: https://adndevblog.typepad.com/autocad/2014/01/pnp3dobjectsmgd-not-found-exception.html
п4. понял только сейчас, что нужно использовать Reflection, верно?
Можно и через Reflection.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение