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

ADN Club => AutoCAD .NET API => Тема начата: Андрей Бушман от 26-12-2015, 16:37:21

Название: PackageContents.xml: загрузка при первом запуске команды
Отправлено: Андрей Бушман от 26-12-2015, 16:37:21
Windows 7 x64 SP1; AutoCAD 2009-2016 x64.

Проверяю загрузку своего пакета `pvp.bundle (https://bitbucket.org/Andrey-Bushman/profile-via-points/downloads)` (v.1.2.0) в AutoCAD (acad.exe) в зависимости от каталога размещения пакета.

На момент создания этой темы содержимое файла  PackageContents.xml такое (https://bitbucket.org/Andrey-Bushman/profile-via-points/commits/043df993770b81bdc989412c8e574eeb61edabe4?at=master#chg-src/pvp-acad.R17.2/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 такая (https://bitbucket.org/Andrey-Bushman/profile-via-points/commits/043df993770b81bdc989412c8e574eeb61edabe4?at=master#chg-src/pvp-acad.R17.2/ExtensionApplication.cs).
 
 * 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?
Название: Re: PackageContents.xml: загрузка при первом запуске команды
Отправлено: Александр Ривилис от 26-12-2015, 17:19:17
Примечание:
Автокад может загружать нужную сборку при первом вызове определённой в ней команды, однако в этом случае перечень предлагаемых подсказкой команд не содержит имени этой команды. Это плохое поведение, т.к. оно сбивает с толку новичков, которые не видя нужной команды в предлагаемом списке, начинают сомневаться в том, правильно ли они набирают имя команды.
В моих тестах AutoCAD 2013...2016 в подсказке имя команды присутствует, даже если сборка еще не загружена.
Название: Re: PackageContents.xml: загрузка при первом запуске команды
Отправлено: Андрей Бушман от 26-12-2015, 17:22:40
В моих тестах AutoCAD 2013...2016 в подсказке имя команды присутствует, даже если сборка еще не загружена.
Я как раз только что выяснил причину такого поведения: нужно в XML задавать атрибут Local для Command даже если в коде определена только глобальная команда. В этом случае в списке команд будет присутствовать и искомая. Я думал, что если локальное имя команды в коде не задано, то и в XML соответсвующий атрибут можно опускать.
Название: Re: PackageContents.xml: загрузка при первом запуске команды
Отправлено: Андрей Бушман от 26-12-2015, 17:58:34
Если установить LoadOnAppearance="True", то после копирования загрузка автоматом происходит (успешно как в 2014, так и в 2015). Подозреваю, что в моём случае LoadOnAutoCADStartup="True" может конфликтовать с наличием\отсутствием какого-то атрибута в одном из тэгов, в виду чего загрузка при первом вызове команд не удаётся.
Название: Re: PackageContents.xml: загрузка при первом запуске команды
Отправлено: Андрей Бушман от 28-12-2015, 13:32:32
Во вложении два архива:

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

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

Надеюсь, в ADN смогут выявить причину обозначенной проблемы.
Название: Re: PackageContents.xml: загрузка при первом запуске команды
Отправлено: Александр Ривилис от 28-12-2015, 14:22:58
Можно не отсылать. Ответ здесь: https://forums.autodesk.com/t5/net/appautoload-in-2013-loadoncommandinvocation-seems-broken/td-p/3612014
В двух словах есть баг, который требует, чтобы AppName и AppDescription были не пустыми. Я заменил AppDescription="" на AppDescription="PVP". Всё работает.
Название: Re: PackageContents.xml: загрузка при первом запуске команды
Отправлено: simson43 от 03-02-2019, 13:18:55
а можно прояснить по поводу этих двух тегов LoadOnCommandInvocation, LoadOnAutoCADStartup?

что делает первый?
а второй загружает сборку при старте автокада? тогда почему при отсутствии этого тега, сборка все равно загружается?
Название: Re: PackageContents.xml: загрузка при первом запуске команды
Отправлено: Александр Ривилис от 03-02-2019, 13:21:38
что делает первый?
Первый загружает сборку при вызове одной из команд, определённых в сборке.
а второй загружает сборку при старте автокада? тогда почему при отсутствии этого тега, сборка все равно загружается?
Потому что по умолчанию загружается при старте AutoCAD.
Название: Re: PackageContents.xml: загрузка при первом запуске команды
Отправлено: simson43 от 03-02-2019, 13:23:06
Спасибо большое!