пятница, 13 марта 2015 г.

Шаблон проекта VS для создания .Net-расширений AutoCAD

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

Шаблон создавался для решения следующих задач:
  1. Предоставление базовой структуры и функционала расширения, что называется "из коробки" - собственно для этого шаблоны обычно и создаются.
  2. Возможность переключения между различными целевыми версиями AutoCAD для написания и отладки кода. При этом автоматически должны соответствующим образом изменяться все настройки проекта, в т.ч. настройки отладки, а так же происходить переподключение всех ссылок (references). При этом состав ссылок должен формироваться с учётом целевой платформы, например: нет смысла подключать сборки Interop, если компилируется под AnyCPU, а так же с учётом наличия\отсутствия тех или иных сборок в целевой версии AutoCAD. Не последнее значение имеет и генерация соответствующего набора символов компиляции, а так же имени целевой сборки.
  3. Компиляция проекта сразу под все нужные версии AutoCAD. Решение о том, какие версии являются нужными, принимает разработчик. Отдельно компиляция для Debug и отдельно для Release.
  4. Автоматическое формирование единой точки входа.
  5. Возможность быстрого переключения между машинами, на которых должна происходить отладка: локальная или любая удалённая. Например, код может тестироваться и отлаживаться на машинках, работающих под управлением WinXPx86, Win7x64, Win7x86, дабы убедиться, что он работает нормально на всех обозначенных операционках.
  6. Разделение настроек на три группы: общие (действуют на все проекты); общие для AutoCAD (действуют на проекты всех расширений AutoCAD); и индивидуальные (действуют только на конкретный проект). Настройки, не являющиеся индивидуальными применяются немедленно сразу ко всем существующим и вновь создаваемым проектам. Такой подход позволяет быстро и легко вносить изменения сразу во все нужные проекты.
  7. Переносимость проекта на другие компьютеры. На одних компьютерах дистрибутивы ObjectARX SDK могут быть распакованы непосредственно на диск "C:\" или "D:\" (самые отвратительные варианты), на других распаковка выполняется не в корневой каталог, но в специально отведённый для этого подкаталог, например "%HOMEDRIVE%\SDK" (это уже гораздо лучше)Я же предпочитаю устанавливать в каталог "%SDK%\<Company-Name>\<Product-Name>\<SDK-Version>". Созданная мною Windows-переменная %SDK% всегда указывает на каталог, являющийся общим для любых SDK. Поскольку я не ограничиваюсь использованием только лишь ObjectARX SDK, то такой подход видится мне наиболее разумным. Вернёмся к переносимости... В данном случае под этим словом я подразумеваю отсутствие необходимости переподключения ссылок (references) проекта, когда на компьютере, куда был скопирован проект, расположение ObjectARX SDK отличается от расположения на исходном компьютере. Если переносится один проект, то переподключить в нём ссылки - не является проблемой, хотя это и не доставляет удовольствия, особенно если учитывать, что потом проект может понадобиться копировать на исходный компьютер и снова переподключать ссылки. Однако, когда копируется некоторое количество проектов, то такое переподключение уже становится весьма неудобным.
В ходе решения обозначенных выше задач удалось создать вполне работоспособный шаблон проекта для языка C#, однако по аналогии он может быть создан и для любого другого языка программирования.

Шаблон имеет свои плюсы и минусы. На мой взгляд, плюсов получилось больше, чем минусов, в виду чего шаблон имеет право на жизнь. Ниже показано видео, демонстрирующее работу шаблона на примере создания всем хорошо известного "Hello World". Текстовые комментарии даны на ломаном английском - это обусловлено тем, что видео писалось в первую очередь для англоязычной аудитории, т.к. именно среди неё мне удалось встретить человека (CADbloke), интересующегося обозначенной темой и имеющего некоторую собственную реализацию своего шаблона, решающего похожие задачи.


UPD: На следующем видео показано, как в зависимости от целевой версии AutoCAD происходит автоматическая реинициализация символов компиляции (помимо прочих свойств проекта). Полагаю, что этот вопрос был мною показан не достаточно ясно в предыдущем видео, раз меня об этом продолжают спрашивать. Надеюсь, что теперь вопрос отпадёт сам собой:


Комментариев нет: