Сообщество программистов Autodesk в СНГ

ADN Club => Inventor API => Тема начата: Vladislav от 23-09-2019, 14:19:43

Название: Расположение плагинов Inventor
Отправлено: Vladislav от 23-09-2019, 14:19:43
Добрый день.
Подскажите пожалуйста, можно ли как-то изменить каталог,
в котором располагаются плагины Inventor. То есть я хочу расположить dll своего плагина и
все необходимые ему библиотеки в отдельном каталоге …\Inventor2019\bin\MyPlugin. Но как это сделать
не знаю.
Благодарю за информацию.
 
Название: Re: Расположение плагинов Inventor
Отправлено: mikazakov от 23-09-2019, 18:21:53
прочитайте страницу 40, там пдф-ка "Создание и отладка Эддин" про тэг Assembly
https://drive.google.com/drive/folders/0B655LZZcPbyNfk0yMUtKSFNMZEVMZHZ1WHhuT0FBSVNORGdzUExkMkhpdTFiOFl1ZkxxekU
Название: Re: Расположение плагинов Inventor
Отправлено: Vladislav от 24-09-2019, 12:42:55
Спасибо.
С расположением dll самого плагина получилось. Но у меня есть ряд dll-библиотек, которые необходимы плагину.
Подскажите пожалуйста, как сделать так, чтобы плагин искал их в той же папке, где он сам. Сейчас он по-прежнему
ищет их в …\Inventor2019\bin.
Строчка
Код - C# [Выбрать]
  1. System.IO.Directory.SetCurrentDirectory(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
почему-то не помогает.
Название: Re: Расположение плагинов Inventor
Отправлено: Александр Ривилис от 24-09-2019, 13:12:29
Подскажите пожалуйста, как сделать так, чтобы плагин искал их в той же папке, где он сам.
А если ты их сам загрузишь при помощи Assembly.LoadFrom() ?
Название: Re: Расположение плагинов Inventor
Отправлено: Александр Ривилис от 24-09-2019, 13:20:01
Вот эта тема может помочь: https://adn-cis.org/forum/index.php?topic=8085.msg28508#msg28508
Название: Re: Расположение плагинов Inventor
Отправлено: Vladislav от 24-09-2019, 14:48:14
   Насколько я понял из темы, необходимо написать обработчик AssemblyResolve, выдающий одну из
загруженных сборок. Должен ли я при этом принудительно загрузить все необходимые сборки с помощью
LoadFile() или LoadFrom()?
Название: Re: Расположение плагинов Inventor
Отправлено: Александр Ривилис от 24-09-2019, 15:14:19
Должен ли я при этом принудительно загрузить все необходимые сборки с помощью
LoadFile() или LoadFrom()?
Можешь их загрузить в самом событии AssemblyResolve.
Название: Re: Расположение плагинов Inventor
Отправлено: Vladislav от 24-09-2019, 16:27:32
Почему-то получается не для всех библиотек. Для некоторых действительно работает.
Название: Re: Расположение плагинов Inventor
Отправлено: Александр Ривилис от 24-09-2019, 16:29:08
Почему-то получается не для всех библиотек. Для некоторых действительно работает.
Это всё .NET-сборки или часть из них mixed или unmanaged? Ну и надеюсь, что ты подписался на это событие до того, как реально используется не найденная сборка.
Название: Re: Расположение плагинов Inventor
Отправлено: Vladislav от 24-09-2019, 16:31:48
Скорей всего, есть и те, и другие. А, возможно, и .NET.
Я, если честно точно не знаю. Их достаточно много.
Название: Re: Расположение плагинов Inventor
Отправлено: Александр Ривилис от 24-09-2019, 16:42:21
Скорей всего, есть и те, и другие.
Ну с unmanaged так поступать нельзя. Их загружают при помощи функции LoadLibrary из Win32
Можно еще задать каталог, в котором будут искаться unmanaged, если путь к ним не задан явно:
https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setdlldirectoryw
Название: Re: Расположение плагинов Inventor
Отправлено: Vladislav от 25-09-2019, 11:37:08
Почему-то не грузится одна dll-сборка.
Но она, вроде бы, полностью .NET-овская.
Название: Re: Расположение плагинов Inventor
Отправлено: Александр Ривилис от 25-09-2019, 16:08:15
Почему-то не грузится одна dll-сборка.
Но она, вроде бы, полностью .NET-овская.
Для неё вызывается обработчик AssemblyResolve? Может она в свою очередь нуждается еще в каких-то сборках?
Название: Re: Расположение плагинов Inventor
Отправлено: Vladislav от 26-09-2019, 11:39:59
Да, нуждается. Получается предварительно, наверное, нужно загрузить их?
Название: Re: Расположение плагинов Inventor
Отправлено: Александр Ривилис от 26-09-2019, 11:41:34
Да, нуждается. Получается предварительно, наверное, нужно загрузить их?
А для этих сборок не срабатывает AssemblyResolve?
Название: Re: Расположение плагинов Inventor
Отправлено: Vladislav от 26-09-2019, 11:52:11
Я их просто предварительно не загружал. Поэтому, видимо, нет.
Но кажется, я решил, проблему путем перемещения папки со всеми сборками в другое место.
Название: Re: Расположение плагинов Inventor
Отправлено: Александр Ривилис от 26-09-2019, 12:00:29
Я их просто предварительно не загружал. Поэтому, видимо, нет.
Причем здесь "не загружал"? Событие AssemblyResolve отрабатывает при необходимости использовать сборку, которая не загружена. И именно в этом событии её нужно самостоятельно загрузить.
Название: Re: Расположение плагинов Inventor
Отправлено: Vladislav от 26-09-2019, 12:36:32
Ааа, видимо я не совсем правильно уловил суть события AssemblyResolve.
Спасибо, посмотрю.
Название: Re: Расположение плагинов Inventor
Отправлено: Александр Ривилис от 04-10-2019, 11:07:13
Vladislav,
Ну и как? Проблема решилась?
Название: Re: Расположение плагинов Inventor
Отправлено: Vladislav от 08-10-2019, 15:05:04
Да. Путем использования обработчика AssemblyResolve и перемещения всей папки с плагином и сопутствующими библиотеками
в кореневой каталог Inventor2019. Не работало, когда эта папка лежала в Inventor2019\bin
Название: Re: Расположение плагинов Inventor
Отправлено: Александр Ривилис от 08-10-2019, 15:16:00
Да. Путем использования обработчика AssemblyResolve и перемещения всей папки с плагином и сопутствующими библиотеками
в кореневой каталог Inventor2019. Не работало, когда эта папка лежала в Inventor2019\bin
Непонятно зачем и то и другое. Должно было быть достаточно обработчика AssemblyResolve.