Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: Андрей Бушман от 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?
-
Примечание:
Автокад может загружать нужную сборку при первом вызове определённой в ней команды, однако в этом случае перечень предлагаемых подсказкой команд не содержит имени этой команды. Это плохое поведение, т.к. оно сбивает с толку новичков, которые не видя нужной команды в предлагаемом списке, начинают сомневаться в том, правильно ли они набирают имя команды.
В моих тестах AutoCAD 2013...2016 в подсказке имя команды присутствует, даже если сборка еще не загружена.
-
В моих тестах AutoCAD 2013...2016 в подсказке имя команды присутствует, даже если сборка еще не загружена.
Я как раз только что выяснил причину такого поведения: нужно в XML задавать атрибут Local для Command даже если в коде определена только глобальная команда. В этом случае в списке команд будет присутствовать и искомая. Я думал, что если локальное имя команды в коде не задано, то и в XML соответсвующий атрибут можно опускать.
-
Если установить LoadOnAppearance="True", то после копирования загрузка автоматом происходит (успешно как в 2014, так и в 2015). Подозреваю, что в моём случае LoadOnAutoCADStartup="True" может конфликтовать с наличием\отсутствием какого-то атрибута в одном из тэгов, в виду чего загрузка при первом вызове команд не удаётся.
-
Во вложении два архива:
* pvp.code_sources.zip - исходный код примера "Hello World".
* pvp.bundle.zip - результат компиляции.
В исходниках файл .\sample\src\pvp-acad.R17.2\readme.md на языке демократии содержит информацию о проблеме. В бинарниках этот же файл находится в подкаталоге .\pvp.bundle\Contents\Help.
Надеюсь, в ADN смогут выявить причину обозначенной проблемы.
-
Можно не отсылать. Ответ здесь: https://forums.autodesk.com/t5/net/appautoload-in-2013-loadoncommandinvocation-seems-broken/td-p/3612014
В двух словах есть баг, который требует, чтобы AppName и AppDescription были не пустыми. Я заменил AppDescription="" на AppDescription="PVP". Всё работает.
-
а можно прояснить по поводу этих двух тегов LoadOnCommandInvocation, LoadOnAutoCADStartup?
что делает первый?
а второй загружает сборку при старте автокада? тогда почему при отсутствии этого тега, сборка все равно загружается?
-
что делает первый?
Первый загружает сборку при вызове одной из команд, определённых в сборке.
а второй загружает сборку при старте автокада? тогда почему при отсутствии этого тега, сборка все равно загружается?
Потому что по умолчанию загружается при старте AutoCAD.
-
Спасибо большое!