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

ADN Club => AutoCAD .NET API => Тема начата: Zombiy от 10-03-2016, 15:07:04

Название: Не отображается созданная команда
Отправлено: Zombiy от 10-03-2016, 15:07:04
Здравствуйте! Начал разбираться с созданием собственных команд. Создал библиотеку классов, добавил ее через NETLOAD в автокад, метод Initialize() срабатывает (выводится соответствующее сообщение), а вот саму команду вызвать не могу, автокад ее не видит. Что еще необходимо сделать, что бы увидеть мою команду в списке команд?

   
Код - C# [Выбрать]
  1. public class Commands : IExtensionApplication
  2.     {
  3.         // функция инициализации (выполняется при загрузке плагина)
  4.         public void Initialize()
  5.         {
  6.             MessageBox.Show("Hello!");
  7.         }
  8.         // функция, выполняемая при выгрузке плагина
  9.         public void Terminate()
  10.         {
  11.             MessageBox.Show("Goodbye!");
  12.         }
  13.         // эта функция будет вызываться при выполнении в AutoCAD команды «TestCommand»
  14.         [CommandMethod("TestCommand")]
  15.         public void MyCommand()
  16.         {
  17.             MessageBox.Show("Habr!");
  18.             //Editor ed = acad.Application.DocumentManager.MdiActiveDocument.Editor;
  19.             //ed.WriteMessage("Hello World");
  20.         }
  21.     }
Название: Re: Не отображается созданная команда
Отправлено: Александр Пекшев aka Modis от 10-03-2016, 15:12:51
Добавьте static:
public static void MyCommand()
Название: Re: Не отображается созданная команда
Отправлено: Александр Ривилис от 10-03-2016, 15:15:14
Zombiy
Приветствую на форуме! Обрати внимание (у меня в подписи) как следует форматировать код у нас на форуме.
Название: Re: Не отображается созданная команда
Отправлено: avc от 10-03-2016, 15:15:35
добавь перед namespace
Код - C# [Выбрать]
  1. [assembly: CommandClass(typeof(YouNameSpace.Commands))]
Название: Re: Не отображается созданная команда
Отправлено: Александр Пекшев aka Modis от 10-03-2016, 15:16:38
добавь перед namespace
Код - C# [Выбрать]
  1. [assembly: CommandClass(typeof(YouNameSpace.Commands))]
Лично я такую штуку ни разу не делал ))
Название: Re: Не отображается созданная команда
Отправлено: avc от 10-03-2016, 15:22:01
Лично я такую штуку ни разу не делал ))
Да, у меня и без этого работет, если конечно static класс. Но где-то читал, что с этим Автокад быстрей найдет команды, поэтом у леплю во всех проектах. И еще вот это для класса инициализации
Код - C# [Выбрать]
  1. [assembly: ExtensionApplication(typeof(пространствоимен.классинициализации))]
Название: Re: Не отображается созданная команда
Отправлено: Александр Ривилис от 10-03-2016, 15:22:14
Лично я такую штуку ни разу не делал ))
Можно не делать. Главное, чтобы если такая строка есть, чтобы она ссылалась на правильный класс.
Название: Re: Не отображается созданная команда
Отправлено: Александр Пекшев aka Modis от 10-03-2016, 15:22:56
Какой интересный ответ помечен как решение  ;D
Название: Re: Не отображается созданная команда
Отправлено: Zombiy от 10-03-2016, 15:26:30
переделал вот так:
Код - C# [Выбрать]
  1. [assembly: CommandClass(typeof(TestLibruaryforAutocad.Commands))]
  2. namespace TestLibruaryforAutocad
  3. {
  4.     public class Commands : IExtensionApplication
  5.     {
  6.      
  7.         public void Initialize()
  8.         {
  9.             MessageBox.Show("Hello!");
  10.         }
  11.      
  12.         public void Terminate()
  13.         {
  14.             MessageBox.Show("Goodbye!");
  15.         }
  16.        
  17.         [CommandMethod("TestCommand")]
  18.         public static void MyCommand()
  19.         {
  20.             MessageBox.Show("Habr!");
  21.            
  22.         }
  23.     }
  24. }
Перезагрузил все в автокад, все равно не видит
Код - C# [Выбрать]
  1. [assembly: CommandClass(typeof(TestLibruaryforAutocad.Commands))]
  2. namespace TestLibruaryforAutocad
  3. {
  4.     public static class Commands
  5.     {
  6.  
  7.         public static void Initialize()
  8.         {
  9.             MessageBox.Show("Hello!");
  10.         }
  11.  
  12.         public static void Terminate()
  13.         {
  14.             MessageBox.Show("Goodbye!");
  15.         }
  16.        
  17.         [CommandMethod("TestCommand")]
  18.         public static void MyCommand()
  19.         {
  20.             MessageBox.Show("Habr!");
  21.            
  22.         }
  23.     }
  24. }
и вот так тоже
Название: Re: Не отображается созданная команда
Отправлено: avc от 10-03-2016, 15:35:13
del
Название: Re: Не отображается созданная команда
Отправлено: Александр Пекшев aka Modis от 10-03-2016, 15:35:22
Лично у меня работает ваш кода из топика. Значит проблема не в коде
Название: Re: Не отображается созданная команда
Отправлено: Zombiy от 10-03-2016, 15:37:19
все равно не видит
ну а static-то где ж ? 
переделал весь класс как static, не помогло
Название: Re: Не отображается созданная команда
Отправлено: Zombiy от 10-03-2016, 15:43:45
Так! Я работал в 2015 автокаде, и проверял ее там же. Сейчас проверил ее же (начальную версию) на 2013 и все получилось! Теперь тогда изменим вопрос, что надо сделать, что бы 2015 тоже ее видел, в чем может быть проблема?
Название: Re: Не отображается созданная команда
Отправлено: Александр Пекшев aka Modis от 10-03-2016, 15:47:06
- Версия Net framework
- Изменения acad.exe.config
- Значение false в CopyLocal для ссылок на библиотеки автокада
Название: Re: Не отображается созданная команда
Отправлено: Александр Пекшев aka Modis от 10-03-2016, 15:49:10
И забыл еще добавить - "Доверительная зона" или как там ее  :D
Название: Re: Не отображается созданная команда
Отправлено: Zombiy от 10-03-2016, 15:58:22
- Версия Net framework
Версия Net framework 4.5
- Изменения acad.exe.config
Код - XML [Выбрать]
  1. <configuration>
  2.  
  3.   <startup useLegacyV2RuntimeActivationPolicy="true">
  4.     <supportedRuntime version="v4.0"/>
  5.   </startup>
  6.  
  7.  
  8.         <generatePublisherEvidence enabled="false"/>    
  9.    </runtime>
  10. </configuration>
- Значение false в CopyLocal для ссылок на библиотеки автокада
значения false на всех ссылках на библиотеки автокада поставил

в автокаде 2013 такой же config файл (там тоже версия 4.0), но там все работает
Название: Re: Не отображается созданная команда
Отправлено: avc от 10-03-2016, 15:59:42
Странно....
Цитировать
Версия Net framework
- не загрузится вообще вся библиотека, инициализации не будет. И автокад-то стоит - значит и фреймворк.
Цитировать
Изменения acad.exe.config
- а что там?
Цитировать
Значение false в CopyLocal
- как бы оно повлияло? акад по любому свои библиотеки загрузит
Цитировать
Доверительная зона
- если отказать на запрос загрузки - тогда и инициализации не будет
Название: Re: Не отображается созданная команда
Отправлено: Александр Пекшев aka Modis от 10-03-2016, 16:02:38
Значит топикстартер где-то что-то от нас утаивает  ;D
Я вот создал новый проект: Net Framework 4.5, библиотеки для 2016 автокада. Скопировал полностью код из топика, собрал сборку, запустил в 2016 автокаде - все работает
Название: Re: Не отображается созданная команда
Отправлено: Александр Ривилис от 10-03-2016, 16:03:55
Zombiy
Ты специально игнорируешь форматирование? Читай мою подпись.

Zombiy
Выложи в архиве свой проект. Укажи версию VS.
Название: Re: Не отображается созданная команда
Отправлено: Александр Ривилис от 10-03-2016, 16:08:36
Цитировать

    Значение false в CopyLocal

- как бы оно повлияло? акад по любому свои библиотеки загрузит
Конфликт библиотек. Команды работать не будут.
Название: Re: Не отображается созданная команда
Отправлено: Zombiy от 10-03-2016, 16:11:52
Значит топикстартер где-то что-то от нас утаивает 
Я вот создал новый проект: Net Framework 4.5, библиотеки для 2016 автокада. Скопировал полностью код из топика, собрал сборку, запустил в 2016 автокаде - все работает
Я готов выдать вам любую информацию :) скажите только какая вам нужна. Библиотеки подгружал из папки автокада 2015, да и плагин то выполняет метод инициализации, проблема лишь в том что не видит команды. Напомню что в 2013 у меня тоже все работает. Давайте попытаемся понять где может быть загвоздка. Прикреплю архив проекта
Название: Re: Не отображается созданная команда
Отправлено: Zombiy от 10-03-2016, 16:14:25
Ты специально игнорируешь форматирование? Читай мою подпись.
Просмотрел, разобрался, в дальнейшем постараюсь не повторять.
Название: Re: Не отображается созданная команда
Отправлено: Вильдар от 10-03-2016, 16:17:05
А попробуй переименовать команду. Может быть такая команда уже определена в автокаде. В другой сборке или в лиспе.
Название: Re: Не отображается созданная команда
Отправлено: Zombiy от 10-03-2016, 16:21:00
А попробуй переименовать команду. Может быть такая команда уже определена в автокаде. В другой сборке или в лиспе.
Нет, не помогло. Да и, полагаю, он бы видел хоть какую-нибудь из этих команд в данной ситуации
Название: Re: Не отображается созданная команда
Отправлено: Александр Пекшев aka Modis от 10-03-2016, 16:23:16
Zombiy, собрал ваш проект - работает. Только я собирал под 2016 автокад и у вас там лишняя ссылка на сборку Aec.. не помню названия)) Я ее удалил
Название: Re: Не отображается созданная команда
Отправлено: Александр Ривилис от 10-03-2016, 16:25:30


Так что проблема похоже с твоим AutoCAD'ом

P.S.: Убедись, что у тебя в каталоге с dll-файлом нет никаких посторонних файлов (например, dll-файлов AutoCAD)
Название: Re: Не отображается созданная команда
Отправлено: Zombiy от 10-03-2016, 16:38:23
P.S.: Убедись, что у тебя в каталоге с dll-файлом нет никаких посторонних файлов (например, dll-файлов AutoCAD)
нет, подгружаю dll прямо из проекта, там у меня только он.
Код рабочий, это хорошо, но проблема остается открытой.
 Автокад у меня полноценный, обе версии (работаю в проектном институте), самим автокадом вроде тоже пользоваться умею. Но нет предположений в каких настройках можно поковыряться :(
Название: Re: Не отображается созданная команда
Отправлено: Вильдар от 10-03-2016, 16:41:40
Проверь папку автокада (типа, c:\Program Files\Autodesk\AutoCAD 2016\), нет ли там файлов твоей сборки случайно.
Название: Re: Не отображается созданная команда
Отправлено: Александр Ривилис от 10-03-2016, 16:42:33
Если ничего не получается, то начни с начала:
1) Скачай и установи ObjectARX SDK 2015: http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=785550
2) Скачай и установи AutoCAD .NET Wizard: https://github.com/ADN-DevTech/AutoCAD-Net-Wizards/raw/ForAutoCAD2016/AutoCADNetWizardsInstaller/AutoCADNetWizards.msi
3) Создай новый проект при помощи AutoCAD .NET Wizard
И тестируй.
Название: Re: Не отображается созданная команда
Отправлено: Александр Ривилис от 10-03-2016, 16:46:50
Автокад у меня полноценный, обе версии
Как минимум у тебя не просто AutoCAD, а вертикальное приложение (например, AutoCAD Architecture или AutoCAD Civil 3D) судя по сборке AecBaseMgd.dll
Название: Re: Не отображается созданная команда
Отправлено: Zombiy от 10-03-2016, 16:59:47
Как минимум у тебя не просто AutoCAD, а вертикальное приложение (например, AutoCAD Architecture или AutoCAD Civil 3D) судя по сборке AecBaseMgd.dll
сборки добавлял из-за попыток что-то исправить. Автокад чистый.
Есть продвижения! Если создать новый документ в 2015, то тоже все работает, но стоит запустить любой существующий - команда не появляется. Мне чаще всего будет необходимо редактировать существующие объекты. По умолчанию все чертежи сохраняются в 2007 версии автокада, но даже при сохранении в более поздних версиях - ничего не меняется. Есть идеи? :)
Название: Re: Не отображается созданная команда
Отправлено: Zombiy от 10-03-2016, 17:06:26
1) Скачай и установи ObjectARX SDK 2015: http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=785550
2) Скачай и установи AutoCAD .NET Wizard: https://github.com/ADN-DevTech/AutoCAD-Net-
все это на всякий случай скачал и установил
Название: Re: Не отображается созданная команда
Отправлено: Александр Ривилис от 10-03-2016, 17:13:32
сборки добавлял из-за попыток что-то исправить. Автокад чистый.
В чистом AutoCAD этой сборки нет. Соотвественно тот проект, который ты выложил просто бы не собрался. Вполне допускаю, что там каша, а не AutoCAD.
все это на всякий случай скачал и установил
И? Какой результат? Сборку создал при помощи AutoCAD .NET Wizard? Она грузится в AutoCAD? Команда _MyCommand (она автоматом создаётся AutoCAD .NET Wizard) запускается?
Название: Re: Не отображается созданная команда
Отправлено: Александр Ривилис от 10-03-2016, 17:22:52
Есть идеи?
Идея:
1) Запустить под отладчиком поставив точку останова на команду.
2) Записать видео (при помощи ScreenCast, как у меня написано в подписи) того, что у тебя происходит.
Название: Re: Не отображается созданная команда
Отправлено: Zombiy от 10-03-2016, 17:28:52
В чистом AutoCAD этой сборки нет. Соотвественно тот проект, который ты выложил просто не собрался.
Цитата: Zombiy от 10-03-2016, 17:06:26
все это на всякий случай скачал и установил
И? Какой результат? Сборку создал при помощи AutoCAD .NET Wizard? Она грузится в AutoCAD? Команда _MyCommand (она автоматом создаётся AutoCAD .NET Wizard) запускается?
в данный момент в папке Autodesk у меня установлены автокад 13 и 15, civil 15 и Revit 15. Но все библиотеки я брал только из папки Автокад 15. Как туда попала вышеупомянутая - не знаю, но я вручную ничего не копировал.

Как пользоваться AutoCAD .NET Wizards, и для чего он нужен, пока не знаю, завтра буду разбираться (пора закругляться)
Название: Re: Не отображается созданная команда
Отправлено: Привалов Дмитрий от 10-03-2016, 21:03:13
Есть продвижения! Если создать новый документ в 2015, то тоже все работает, но стоит запустить любой существующий - команда не появляется.

возможно не стоит прописывать команды в классе, выполняемом при загрузке Commands : IExtensionApplication
попробуй создать отдельный класс для добавления команд

Код - C# [Выбрать]
  1. public class Commands2
  2. {
  3.    [CommandMethod("Commandname")]
  4.    public void Commandname()
  5.    {
  6.    }
  7. }
Название: Re: Не отображается созданная команда
Отправлено: Zombiy от 11-03-2016, 09:28:45
В настройках автокада добавил папку своей библиотеки, в "путь доступа к вспомогательным файлам" и все начало работать как надо. На сколько я понял он просто не доверял источнику, в котором находится библиотека. Всем спасибо за помощь, так или иначе узнал много нового.
Название: Re: Не отображается созданная команда
Отправлено: Александр Ривилис от 11-03-2016, 09:47:59
Всем спасибо за помощь, так или иначе узнал много нового.
Вот тебе еще новое: добавление пути доступа к вспомогательным файлам не делает сборку доверенной. Для этой цели есть Доверенные местоположения:

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F47606%2F7842324.5%2F0_11ce9a_8a8c02ad_orig.png&hash=7f1d9d18f51f049692624fcf002627dc)

Но думаю, что причина в чем-то другом. Иначе код в Initialize у тебя бы тоже не работал.

Название: Re: Не отображается созданная команда
Отправлено: Zombiy от 11-03-2016, 10:01:43
Но думаю, что причина в чем-то другом. Иначе код в Initialize у тебя бы тоже не работал.
каждый раз когда я добавлял свою библиотеку в 2015 он спрашивал "уверены ли вы, что хотите загрузить файл из этого источника?"(или вроде того), а 2013 этого не делал, и там все работало. Это и привело меня к мысли что надо добавить папку в доверенные местоположения (ну либо во вспомогательные файлы)
Название: Re: Не отображается созданная команда
Отправлено: Александр Ривилис от 11-03-2016, 10:16:23
Вывод: причина в чем-то другом. И она не найдена.
Название: Re: Не отображается созданная команда
Отправлено: Александр Пекшев aka Modis от 11-03-2016, 10:17:55
Я об этом писал еще в 14 ответе  :)
Правда не так подробно, и возможно ТС не понял
Название: Re: Не отображается созданная команда
Отправлено: Александр Ривилис от 11-03-2016, 10:27:24
Если создать новый документ в 2015, то тоже все работает, но стоит запустить любой существующий - команда не появляется.
Ты как грузишь свою dll-сборку?
Название: Re: Не отображается созданная команда
Отправлено: Zombiy от 11-03-2016, 11:13:14
Ты как грузишь свою dll-сборку?
Раньше через NETLOAD я выбирал путь к библиотеке, которая находилась в моем проекте, сейчас я создал в папке автокада свою папку MyLibruary, добавил ее в доверенные местоположения, и закинул туда свою библиотеку. В дальнейшем планирую добавить ее в реестр, что бы не подгружать каждый раз
Добавил ключ на эту библиотеку в реестре, теперь она сама подгружается при запуске, и работает как надо.
Название: Re: Не отображается созданная команда
Отправлено: Александр Ривилис от 11-03-2016, 12:25:55
1. Какое значение системной переменной SECURELOAD: https://knowledge.autodesk.com/support/autocad/learn-explore/caas/CloudHelp/cloudhelp/2016/ENU/AutoCAD-Core/files/GUID-541566C6-2738-49DD-87C3-C1490E924A02-htm.html
2. Если ты убираешь папку MyLibruary из доверенных папок то твой модуль работает?
Название: Re: Не отображается созданная команда
Отправлено: Zombiy от 11-03-2016, 14:09:28
1. Какое значение системной переменной SECURELOAD: https://knowledge.autodesk.com/support/autocad/learn-explore/caas/CloudHelp/cloudhelp/2016/ENU/AutoCAD-Core/files/GUID-541566C6-2738-49DD-87C3-C1490E924A02-htm.html
Переменная убирает ограничения на доверенные папки, действительно удобно, и теперь можно подгружать библиотеку откуда угодно
2. Если ты убираешь папку MyLibruary из доверенных папок то твой модуль работает?
Вопрос видимо действительно не решен, хоть и снят. Не понятно почему команда вчера отказывалась появляться.
Сейчас попытался восстановить вчерашнюю ситуацию (удалил ключ из реестра, удалил доверенную папку, вернул значение SECURELOAD в "1". Перезапустил автокад команды не было. Загрузил библиотеку через NETLOAD, принял сообщение о том что использую библиотеку из недоверенной папки и команда появилась как ни в чем не бывало. Почему этого не происходило вчера, не понятно :( Зря только отвлек Вас.
Название: Re: Не отображается созданная команда
Отправлено: Александр Ривилис от 11-03-2016, 14:42:10
Вопрос видимо действительно не решен, хоть и снят. Не понятно почему команда вчера отказывалась появляться.
Сейчас попытался восстановить вчерашнюю ситуацию (удалил ключ из реестра, удалил доверенную папку, вернул значение SECURELOAD в "1". Перезапустил автокад команды не было. Загрузил библиотеку через NETLOAD, принял сообщение о том что использую библиотеку из недоверенной папки и команда появилась как ни в чем не бывало. Почему этого не происходило вчера, не понятно :( Зря только отвлек Вас.
Вот теперь я удовлетворён!