PackageContents.xml: загрузка при первом запуске команды

Автор Тема: PackageContents.xml: загрузка при первом запуске команды  (Прочитано 10993 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Windows 7 x64 SP1; AutoCAD 2009-2016 x64.

Проверяю загрузку своего пакета `pvp.bundle` (v.1.2.0) в AutoCAD (acad.exe) в зависимости от каталога размещения пакета.

На момент создания этой темы содержимое файла  PackageContents.xml такое (ссылка на соответствующий коммит).

Пакет `pvp.bundle` успешно загружается в AutoCAD 2009-2016 из произвольного каталога при помощи команды NETLOAD и команды плагина успешно запускаются.

Примечание:
Автокад может загружать нужную сборку при первом вызове определённой в ней команды, однако в этом случае перечень предлагаемых подсказкой команд не содержит имени этой команды. Это плохое поведение, т.к. оно сбивает с толку новичков, которые не видя нужной команды в предлагаемом списке, начинают сомневаться в том, правильно ли они набирают имя команды.

Далее по тексту анализируется работа загрузчика AutoCAD 2012-2016 в случае размещения `pvp.bundle` в каталог `%APPDATA%/Autodesk/ApplicationPlugins`

 * AutoCAD 2012 - English SP2 x64: загружается при первом вызове команды плагина (как и ожидалось).
 
 * AutoCAD 2013 SP2 x64 Enu: то же, что и для AutoCAD 2012 - English SP2 x64.
 
 * AutoCAD 2014 SP1 x64 Enu: Сбока не загружается при старте AutoCAD, но и вызов команды не приводит к загрузке расширения. Приходится принудительно грузить через NETLOAD. Если установить LoadOnAutoCADStartup="True", то при старте AutoCAD плагин успешно загружается.
 
 * AutoCAD 2015 SP1 x64 Enu: Сбока не загружается при старте AutoCAD, но и вызов команды не приводит к загрузке расширения. Приходится принудительно грузить через NETLOAD. Если установить LoadOnAutoCADStartup="True", то при очередном старте AutoCAD получаем Fatal Error. Имеющаяся на момент создания темы реализация IExtensionApplication такая.
 
 * AutoCAD 2016 SP1 x64 Enu: Поскольку сборка не подписана, то при первой принудительной загрузки плагина устанавливаю галочку мол "всегда загружать". После перезагрузки AutoCAD наблюдаю то же самое, что было для AutoCAD 2012 - English SP2 x64 (т.е. всё работает как ожидалось).
 
 * AutoCAD 2016 SP1 x64 Rus: то же, что и для AutoCAD 2016 SP1 x64 Enu.

Сейчас разбираюсь, почему в 2015-м получаю Fatal Error...

Интересует такой момент: почему при старте команды может не грузиться плагин в помеченных красным цветом версиях AutoCAD?

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Примечание:
Автокад может загружать нужную сборку при первом вызове определённой в ней команды, однако в этом случае перечень предлагаемых подсказкой команд не содержит имени этой команды. Это плохое поведение, т.к. оно сбивает с толку новичков, которые не видя нужной команды в предлагаемом списке, начинают сомневаться в том, правильно ли они набирают имя команды.
В моих тестах AutoCAD 2013...2016 в подсказке имя команды присутствует, даже если сборка еще не загружена.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
В моих тестах AutoCAD 2013...2016 в подсказке имя команды присутствует, даже если сборка еще не загружена.
Я как раз только что выяснил причину такого поведения: нужно в XML задавать атрибут Local для Command даже если в коде определена только глобальная команда. В этом случае в списке команд будет присутствовать и искомая. Я думал, что если локальное имя команды в коде не задано, то и в XML соответсвующий атрибут можно опускать.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Если установить LoadOnAppearance="True", то после копирования загрузка автоматом происходит (успешно как в 2014, так и в 2015). Подозреваю, что в моём случае LoadOnAutoCADStartup="True" может конфликтовать с наличием\отсутствием какого-то атрибута в одном из тэгов, в виду чего загрузка при первом вызове команд не удаётся.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Во вложении два архива:

* pvp.code_sources.zip - исходный код примера "Hello World".
* pvp.bundle.zip - результат компиляции.

В исходниках файл .\sample\src\pvp-acad.R17.2\readme.md на языке демократии содержит информацию о проблеме. В бинарниках этот же файл находится в подкаталоге .\pvp.bundle\Contents\Help.

Надеюсь, в ADN смогут выявить причину обозначенной проблемы.

Отмечено как Решение Андрей Бушман 28-12-2015, 14:38:48

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Можно не отсылать. Ответ здесь: https://forums.autodesk.com/t5/net/appautoload-in-2013-loadoncommandinvocation-seems-broken/td-p/3612014
В двух словах есть баг, который требует, чтобы AppName и AppDescription были не пустыми. Я заменил AppDescription="" на AppDescription="PVP". Всё работает.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
а можно прояснить по поводу этих двух тегов LoadOnCommandInvocation, LoadOnAutoCADStartup?

что делает первый?
а второй загружает сборку при старте автокада? тогда почему при отсутствии этого тега, сборка все равно загружается?

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
что делает первый?
Первый загружает сборку при вызове одной из команд, определённых в сборке.
а второй загружает сборку при старте автокада? тогда почему при отсутствии этого тега, сборка все равно загружается?
Потому что по умолчанию загружается при старте AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Спасибо большое!