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

ADN Club => AutoCAD .NET API => Тема начата: Юрий Кузнецов от 14-03-2021, 14:28:58

Название: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Юрий Кузнецов от 14-03-2021, 14:28:58
Здравствуйте господа хорошие.
В качестве писателя я у вас в первый раз (как читатель - можно сказать живу тут), но.. вперся, а время жмет.
На целевой машине dll грузится (NETLOAD - не ругается), но ее команды не выполняются - "неизвестная команда".
На своей - все как часы. OS & AutoCAD - полностью идентичны. Куда копать? Подскажите, плиз
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Александр Ривилис от 14-03-2021, 15:06:47
Причин может быть множество. Например:
1. DLL-файл заблокирован при передаче через интернет. Нужно разблокировать:

2. CopyLocal установлено в True вместо False для acdbmgd.dll, acmgd.dll, accoremgd.dll
3. Возникает исключение в методе Initialize.
4. Используется неустановленная версия .NET Framework
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Юрий Кузнецов от 14-03-2021, 15:21:10
1. Явное копирование DLL в корень акадовской папки
2. CopyLocal всех трех - false
3. "Initialize" - такого метода у меня нет
4. .NET Framework - 4.6
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Александр Ривилис от 14-03-2021, 15:42:47
3. "Initialize" - такого метода у меня нет
Ты в этом уверен?
Это метод интерфейса IExtensionApplication.Initialize(), который вызвается при загрузке dll-файла по NETLOAD
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Александр Ривилис от 14-03-2021, 15:45:51
4. .NET Framework - 4.6
Версия AutoCAD? Версия Windows?
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Александр Ривилис от 14-03-2021, 15:47:01
1. Явное копирование DLL в корень акадовской папки
Это не значит, что файл разблокирован. Если его передали через интернет, то как его не копируй он останется заблокированным.
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Юрий Кузнецов от 14-03-2021, 16:10:16
целевой комп на соседнем столе
AutoCad - 2017
Windows - 7-ка
NETLOAD я сам набираю в командной строке Акада на целевой машине, если исключение есть - я должен был это увидеть?

У меня в свойствах проекта "целевая рабочая среда" - стоит ".Net Framework 4.6. Но и на моей и на целевой самая свежая папка "C:\Windows\Microsoft.NET\Framework\v4.0.30319". Но на моем компе прога работает..
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Александр Ривилис от 14-03-2021, 16:16:29
NETLOAD я сам набираю в командной строке Акада на целевой машине, если исключение есть - я должен был это увидеть?
Нет. AutoCAD сам при запуске метода Initialize перехватывает исключения. Но если исключение возникает, то команды не регистрируются.
У меня в свойствах проекта "целевая рабочая среда" - стоит ".Net Framework 4.6. Но и на моей и на целевой самая свежая папка "C:\Windows\Microsoft.NET\Framework\v4.0.30319". Но на моем компе прога работает..
Имя папки никакого отношения к версии .NET Framework не имеет. Если установлен AutoCAD 2017, то можно использовать .NET Framework 4.6 - он устанавливается (если его не было) при установке AutoCAD.
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Александр Ривилис от 14-03-2021, 16:17:26
целевой комп на соседнем столе
dll-файл передаешь на флешке или по локальной сети?
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Юрий Кузнецов от 14-03-2021, 16:18:29
по сети
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Александр Ривилис от 14-03-2021, 16:19:19
по сети
Значит проверь блокировку.
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Юрий Кузнецов от 14-03-2021, 16:29:00
блокировки нет.
То что я загрузил на целевую Debug-версию Dll может влиять..?
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Александр Ривилис от 14-03-2021, 16:30:41
То что я загрузил на целевую Debug-версию Dll может влиять..?
Да. Нужно грузить Release (хотя Debug часто тоже работает).
Ну и вставь отладочную печать в Initialize.
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Юрий Кузнецов от 14-03-2021, 16:37:58
А как отловить этот метод Initialize, сори, если это очень просто..
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Юрий Кузнецов от 14-03-2021, 16:48:13
Еде одно большое "сори" - у меня достаточно большой проект - десятки команд из под Акада, бизнес логика, математика.. эти библиотеки (которые Акад не задействуют, но из под команд для него написанных вызываются) они у меня лежат рядом с основной DLL, которая для Акада.. может быть дело в их взаимодействии?
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Александр Ривилис от 14-03-2021, 16:56:39
может быть дело в их взаимодействии?
Запросто. Поэтому я и написал, что вариантов много. Начни с отладочной печати.
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Александр Ривилис от 14-03-2021, 17:00:32
А как отловить этот метод Initialize, сори, если это очень просто..
Его не нужно отлавливать. Он просто у тебя должен быть. Должен быть класс, который реализует интерфейс IExtensionApplication, у которого методы Initialize и Terminate. Тебя должен сейчас интересовать только метод Initialize.
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Lemieux от 14-03-2021, 17:28:19
3. "Initialize" - такого метода у меня нет
Ты в этом уверен?
Это метод интерфейса IExtensionApplication.Initialize(), который вызвается при загрузке dll-файла по NETLOAD
Может человек весь свой проект запилил на [CommandMethod...]?
PS Хотя очень странная тема.
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Александр Ривилис от 14-03-2021, 18:05:35
Может человек весь свой проект запилил на [CommandMethod...]?
Теоретически это возможно. Но тогда непонятно как отловить причину, по которой эта dll-ка некорректно грузится (или не грузится) в AutoCAD.
Вполне возможно, что если она связана с другими dll-файлами (native или managed) и не находит их, то сообщений никаких не возникает, но сборка не грузится и не работает.
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Юрий Кузнецов от 15-03-2021, 11:34:44
Может человек весь свой проект запилил на [CommandMethod...]?
PS Хотя очень странная тема.
Скорее всего именно так.. хотя и не осознанно.. а как лучшие практики советуют?
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Юрий Кузнецов от 15-03-2021, 11:36:57
Интерфейс IExtensionApplication не использовал (даже не знал о его существовании). Осознал..
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Александр Ривилис от 15-03-2021, 12:30:21
Интерфейс IExtensionApplication не использовал (даже не знал о его существовании). Осознал..
Кстати, в Initialize() ты можешь загрузить нужные тебе сборки.
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Юрий Кузнецов от 15-03-2021, 12:42:49
Кстати, в Initialize() ты можешь загрузить нужные тебе сборки.
Ок, синкс
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Дмитрий Загорулькин от 15-03-2021, 13:18:11
На целевой машине dll грузится (NETLOAD - не ругается), но ее команды не выполняются - "неизвестная команда".
На своей - все как часы. OS & AutoCAD - полностью идентичны.
Я бы для начала убедился, что на целевой машине действительно всё ок. Для этого написал бы самый простой командный "хелловорд" и проверил бы, что он грузится и выполняется.
И ещё стоит проверить на третьей машине проблемную dll. Если запустится, то проблема может быть совсем не в dll.
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Дмитрий Загорулькин от 15-03-2021, 13:29:26
1. Явное копирование DLL в корень акадовской папки
Зачем такое варварство? Советую таким не злоупотреблять. Не надо делать склад из сторонних приложений и их вспомогательных библиотек в системных папках AutoCAD. Лучше cделать отдельную папку для "довесков", типа C:\AcadSupport (или на другом диске, если их несколько в системе), прописать эту папку и вложенные в неё как доверенные в настройках AutoCAD и класть различные загружаемые вручную приложения туда. Можно ещё делать подпапки, типа LISP, Net и т.п.
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Юрий Кузнецов от 15-03-2021, 13:46:58
Зачем такое варварство? Советую таким не злоупотреблять. Не надо делать склад из сторонних приложений и их вспомогательных библиотек в системных папках AutoCAD. Лучше cделать отдельную папку для "довесков", типа C:\AcadSupport (или на другом диске, если их несколько в системе), прописать эту папку и вложенные в неё как доверенные в настройках AutoCAD и класть различные загружаемые вручную приложения туда. Можно ещё делать подпапки, типа LISP, Net и т.п.
Так и сделал уже, синкс. Добавил Initialize. Перекомпилял в Realise и.. все заработало!!!.. на трех машинах потестил.. и на всех заработало!!! Спасибо, мужики!!!
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Дмитрий Загорулькин от 15-03-2021, 14:05:03
Так и сделал уже, синкс.
Off-Topic: показать
Раковины? :)
https://translate.google.com/?hl=ru&sl=en&tl=ru&text=sinks&op=translate
Название: Re: v2017. Не исполняется DLL на целевом компьютере
Отправлено: Lemieux от 15-03-2021, 14:18:17
Может человек весь свой проект запилил на [CommandMethod...]?
PS Хотя очень странная тема.
Скорее всего именно так.. хотя и не осознанно.. а как лучшие практики советуют?
В своём САПРе я делал так. Все .dll лежат в .bundle. Есть общая .dll, которая потом грузит остальные .dll. Во всех .dll (лично в моём проекте) реализуется интерфейс IExtensionApplication: общая .dll грузит другие .dll, а те в свою очередь инициализируют свои ленты и грузят команды через Utils.AddCommand (но это необязательно, можно просто через [CommandMethod]).