3. "Initialize" - такого метода у меня нетТы в этом уверен?
4. .NET Framework - 4.6Версия AutoCAD? Версия Windows?
1. Явное копирование DLL в корень акадовской папкиЭто не значит, что файл разблокирован. Если его передали через интернет, то как его не копируй он останется заблокированным.
NETLOAD я сам набираю в командной строке Акада на целевой машине, если исключение есть - я должен был это увидеть?Нет. AutoCAD сам при запуске метода Initialize перехватывает исключения. Но если исключение возникает, то команды не регистрируются.
У меня в свойствах проекта "целевая рабочая среда" - стоит ".Net Framework 4.6. Но и на моей и на целевой самая свежая папка "C:\Windows\Microsoft.NET\Framework\v4.0.30319". Но на моем компе прога работает..Имя папки никакого отношения к версии .NET Framework не имеет. Если установлен AutoCAD 2017, то можно использовать .NET Framework 4.6 - он устанавливается (если его не было) при установке AutoCAD.
целевой комп на соседнем столеdll-файл передаешь на флешке или по локальной сети?
по сетиЗначит проверь блокировку.
То что я загрузил на целевую Debug-версию Dll может влиять..?Да. Нужно грузить Release (хотя Debug часто тоже работает).
может быть дело в их взаимодействии?Запросто. Поэтому я и написал, что вариантов много. Начни с отладочной печати.
А как отловить этот метод Initialize, сори, если это очень просто..Его не нужно отлавливать. Он просто у тебя должен быть. Должен быть класс, который реализует интерфейс IExtensionApplication, у которого методы Initialize и Terminate. Тебя должен сейчас интересовать только метод Initialize.
Может человек весь свой проект запилил на [CommandMethod...]?3. "Initialize" - такого метода у меня нетТы в этом уверен?
Это метод интерфейса IExtensionApplication.Initialize(), который вызвается при загрузке dll-файла по NETLOAD
Может человек весь свой проект запилил на [CommandMethod...]?Теоретически это возможно. Но тогда непонятно как отловить причину, по которой эта dll-ка некорректно грузится (или не грузится) в AutoCAD.
Может человек весь свой проект запилил на [CommandMethod...]?Скорее всего именно так.. хотя и не осознанно.. а как лучшие практики советуют?
PS Хотя очень странная тема.
Интерфейс IExtensionApplication не использовал (даже не знал о его существовании). Осознал..Кстати, в Initialize() ты можешь загрузить нужные тебе сборки.
Кстати, в Initialize() ты можешь загрузить нужные тебе сборки.Ок, синкс
На целевой машине dll грузится (NETLOAD - не ругается), но ее команды не выполняются - "неизвестная команда".Я бы для начала убедился, что на целевой машине действительно всё ок. Для этого написал бы самый простой командный "хелловорд" и проверил бы, что он грузится и выполняется.
На своей - все как часы. OS & AutoCAD - полностью идентичны.
1. Явное копирование DLL в корень акадовской папкиЗачем такое варварство? Советую таким не злоупотреблять. Не надо делать склад из сторонних приложений и их вспомогательных библиотек в системных папках AutoCAD. Лучше cделать отдельную папку для "довесков", типа C:\AcadSupport (или на другом диске, если их несколько в системе), прописать эту папку и вложенные в неё как доверенные в настройках AutoCAD и класть различные загружаемые вручную приложения туда. Можно ещё делать подпапки, типа LISP, Net и т.п.
Зачем такое варварство? Советую таким не злоупотреблять. Не надо делать склад из сторонних приложений и их вспомогательных библиотек в системных папках AutoCAD. Лучше cделать отдельную папку для "довесков", типа C:\AcadSupport (или на другом диске, если их несколько в системе), прописать эту папку и вложенные в неё как доверенные в настройках AutoCAD и класть различные загружаемые вручную приложения туда. Можно ещё делать подпапки, типа LISP, Net и т.п.Так и сделал уже, синкс. Добавил Initialize. Перекомпилял в Realise и.. все заработало!!!.. на трех машинах потестил.. и на всех заработало!!! Спасибо, мужики!!!
Так и сделал уже, синкс.
В своём САПРе я делал так. Все .dll лежат в .bundle. Есть общая .dll, которая потом грузит остальные .dll. Во всех .dll (лично в моём проекте) реализуется интерфейс IExtensionApplication: общая .dll грузит другие .dll, а те в свою очередь инициализируют свои ленты и грузят команды через Utils.AddCommand (но это необязательно, можно просто через [CommandMethod]).Может человек весь свой проект запилил на [CommandMethod...]?Скорее всего именно так.. хотя и не осознанно.. а как лучшие практики советуют?
PS Хотя очень странная тема.