Почему AutoCAD не видит командный метод в режиме отладки?

Автор Тема: Почему AutoCAD не видит командный метод в режиме отладки?  (Прочитано 17824 раз)

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

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

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Всем привет. Суть проблемы:
На конкретной машине (Windows7x64) конкретный AutoCAD(2017x64) не видит командный метод из сборки .dll в режиме отладки.
Код - C# [Выбрать]
  1. [CommandMethod("InsertBlock")]
Не видит - значит команда InsertBlock в AutoCAD "неизвестная команда".
Если просто открыть AutoCAD и подгрузить туда сборку (то есть не в режиме отладки), то все окей. Если запустить в режиме отладки AutoCAD2016x64 (то есть другой акад на той же машине), то все работает.
Я так понимаю, что это что-то очевидное, но ничего на ум не приходит. Буду признателен за помощь. Заранее, спасибо.

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

  • Administrator
  • *****
  • Сообщений: 13881
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Я так понимаю, что это что-то очевидное, но ничего на ум не приходит.
Например, для сборок AutoCAD в режиме отладки указано Copy Local = True вместо False
Кстати, а сборка в режиме отладки там вообще загружается?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Например, для сборок AutoCAD в режиме отладки указано Copy Local = True вместо False
Нет. Проверял.

Кстати, а сборка в режиме отладки там вообще загружается?
Да, загружается (если критерием загрузки считать отсутствие ошибок после Netload).

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

  • Administrator
  • *****
  • Сообщений: 13881
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Нет. Проверял.
Проверь, что в каталоге Debug нет сборок AutoCAD.
Да, загружается (если критерием загрузки считать отсутствие ошибок после Netload).
Критерий неправильный. Вставь в метод Initialize отладочную печать или точку остановки и проверь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Онлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Да, загружается (если критерием загрузки считать отсутствие ошибок после Netload).
Смотри версии .net framework. какая на удаленной машине и под которую собран проект.
Я как то собрал под 2014 акад с .net 4.5 ... и на 2х машинах не запустилось и ошибок не было, потому что там .net 4.0 было...

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Проверь, что в каталоге Debug нет сборок AutoCAD.

Критерий неправильный. Вставь в метод Initialize отладочную печать или точку остановки и проверь.
Делаю.

Сделано:

Вот это поворот!
Ведь реально не загружается. А я думал, что "доверительное окошко" и отсутствие ошибок - это критерий корректной загрузки сборки.

Update:
Извиняюсь! Я некорректно выполнил метод Initialize.
В итоге, сборка загружается:

Но в ней не работает командный метод. Как такое может быть?
« Последнее редактирование: 08-09-2016, 10:18:50 от Максим Маркевич »

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Смотри версии .net framework. какая на удаленной машине и под которую собран проект.
Я как то собрал под 2014 акад с .net 4.5 ... и на 2х машинах не запустилось и ошибок не было, потому что там .net 4.0 было...
Это не удаленная машина. Поехал в Москву на неделю, пришлось с собой ноут взять, чтобы была возможность поработать. Версия .Net framework, которая у меня установлена - это 4.6:

А сборку собираю при помощи 4.5. Я так понимаю, что проблем не должно быть.

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

  • Administrator
  • *****
  • Сообщений: 13881
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
В итоге, сборка загружается:

Но в ней не работает командный метод. Как такое может быть?
Убедись, что в методе Initilize не возникает исключение. Лучше всего оберни весь код в:
Код - C# [Выбрать]
  1. try {
  2. // тут твой код
  3. } catch {};
Если исключение возникает, то ни один командный метод работать не будет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Убедись, что в методе Initilize не возникает исключение. Лучше всего оберни весь код в:
Так ведь я Initilize вызываю из другого класса.
Код - C# [Выбрать]
  1.     public class CommandClassTest
  2.     {
  3.         // Смешно и непонятно, но это не работает в стадии отладки в AutoCAD 2017x64
  4.         // на конкретном компе
  5.         [CommandMethod("InsertBlock")]
  6.         public void InsertBlock()
  7.         {
  8.             Editor ed =
  9.                Application.DocumentManager.MdiActiveDocument.Editor;
  10.             ed.WriteMessage("ВОТ ЭТОТ МЕТОД НЕ РАБОТАЕТ В СТАДИИ ОТЛАДКИ!!!");
  11.         }
  12.     }
  13.     // Все методы класса ниже полноценно работают
  14.     public class InitializationTest : IExtensionApplication
  15.     {
  16.         public void Initialize()
  17.         {
  18.             Editor ed =
  19.               Application.DocumentManager.MdiActiveDocument.Editor;
  20.             ed.WriteMessage("СБОРКА ЗАГРУЖАЕТСЯ!!!");
  21.         }
  22.         public void Terminate()
  23.         {
  24.             Console.WriteLine("Это от балды");
  25.         }
  26.         [CommandMethod("TST")]
  27.         public void Test()
  28.         {
  29.             Editor ed =
  30.               Application.DocumentManager.MdiActiveDocument.Editor;
  31.             ed.WriteMessage("Тестовый командный метод.");
  32.         }
  33.     }
  34.  
Я уже и не знаю, что думать.:( Вроде как, сборка загружается. Командный метод простейший, но не работает в стадии отладки, а работает, если загружать его просто в автокад.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Не видя полного исходного кода - это напоминает лечение по фотографии. Например, возможно у тебя сборке назначен атрибут CommandClass, указывающий на др. тип вместо CommandClassTest.

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

  • Administrator
  • *****
  • Сообщений: 13881
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
[CommandMethod("TST")]
Эта команда в режиме отладки у тебя работает?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Максим Маркевич 08-09-2016, 14:12:19

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

  • Administrator
  • *****
  • Сообщений: 13881
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
На конкретной машине (Windows7x64) конкретный AutoCAD(2017x64) не видит командный метод из сборки .dll в режиме отладки.
Кстати, убедись, что установлен SP1 на AutoCAD 2017x64:
http://adn-cis.org/autocad-2017-sp1-i-otladka-.net-prilozhenij.html
http://adn-cis.org/autocad-2017-service-pack-1-mexanizm-avtozagruzki.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Не видя полного исходного кода - это напоминает лечение по фотографии. Например, возможно у тебя сборке назначен атрибут CommandClass, указывающий на др. тип вместо CommandClassTest.
Так ведь тогда бы не работало в AutoCAD2016 в режиме отладки. А у меня не работает отладка только в AutoCAD 2017.
Но намек понял - прикрепляю проект.
Эта команда в режиме отладки у тебя работает?
Нет, ни один командный метод у меня не работает в режиме отладки в AutoCAD2017x64. Да я бы забил на эту мелочь. Столько всего уже переделал, никогда не ожидал подвоха в таком месте. Уверен, это как-то связано с ноутом, на котором я впервые что-то пишу (или .Net framework, как говорил Boxa.Shu, или какие-то непонятные мне настройки). Но не могу дальше работать :) Не отпускает.

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Кстати, убедись, что установлен SP1 на AutoCAD 2017x64:
http://adn-cis.org/autocad-2017-sp1-i-otladka-.net-prilozhenij.html
http://adn-cis.org/autocad-2017-service-pack-1-mexanizm-avtozagruzki.html
Такого подвоха я никак не ожидал!!!  :(
Ноутом почти не пользуюсь, видимо ставил этот акад еще зимой, когда не было SP1. В противном случае, он бы загрузился.
Александр Ривилис, огромное спасибо. Очень признателен!!! :)
Пол дня убито. >:( Радует то, что параллельно захвачена такая тема как метод Initilize.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Дабы не заморачиваться с ситуациями, подобными той, что обозначена на скрине ниже (т.е. возникающими при открытии твоих проектов на др. произвольных машинах), ты можешь пользоваться соответствующими NuGet-пакетами: http://bushman-andrey.blogspot.ru/2016/07/nuget-autocad-net-api.html

В этом случае скачав твой проект архив или с гитхаба или с битбукета достаточно будет лишь заменить имя удалённой машинки и нажать F5 для старта отладки.