Как я могу повысить скорость разработки подключаемых модулей .NET?

Я разрабатываю надстройку AutoCAD, в которой используется сборка .NET 4.6. Я нахожу процесс разработки очень разочаровывающим; API очень большой, а документацию, помимо того, что нужно для начала, можно найти повсюду. Единственный способ добиться чего-либо - это просто создать прототип функций в Visual Studio и посмотреть, работает ли оно. Затем требуется несколько минут для загрузки AutoCAD и подключения отладчика, что разрушает мой рабочий процесс создания прототипов.

Было бы очень удобно, если бы у меня было что-то вроде Linqpad для прототипирования моих приложений, чтобы я мог найти данные, которые я ищу. Я не замужем за идеей использования Linqpad; однако, если мне не хватает другой техники, я бы хотел об этом услышать.

Я не уверен, смогу ли я достичь этого с помощью про-версии, но, поскольку пробной версии нет, я не могу узнать.


person Steve Rukuts    schedule 23.10.2017    source источник
comment
Каков ваш процесс тестирования / отладки кода? Несколько минут на загрузку autocad и присоединение отладчика звучат неправильно (слишком долго). Надеюсь, это то, с чем я могу помочь.   -  person Nik    schedule 23.10.2017
comment
Компиляция происходит почти мгновенно, но на самом деле загрузка AutoCAD, открытие целевой модели, подключение отладчика и загрузка сборки - все это отдельные шаги. Кажется, что если вы запустите AutoCAD с отладчиком с самого начала, он выйдет из строя (возможно, мера борьбы с пиратством?). Я изучал возможность перезагрузки плагина в реальном времени, но это было бы в другом домене приложения, что означало бы, что мне пришлось бы выяснить, как вызвать кросс-домен приложения.   -  person Steve Rukuts    schedule 23.10.2017
comment
Что я делаю: в Visual Studio в библиотеке .NET, содержащей код надстройки, перейдите в Свойства - ›Отладка -› Действие при запуске, выберите Запустить внешнюю программу: и вставьте C:\Program Files\Autodesk\AutoCAD 2015\acad.exe (это будет отличаться в зависимости от вашего AutoCAD версия). Затем введите /nologo в поле Аргументы командной строки: (это значительно ускорит загрузку AutoCad). Вы пробовали это? Это где происходит сбой?   -  person Nik    schedule 23.10.2017
comment
И, конечно же, нажатие F5 запустит AutoCAD и загрузит вашу сборку в отладчик, где вы можете пошагово выполнять строки кода. Это не должно занять больше 5-10 секунд, в зависимости от вашей машины.   -  person Nik    schedule 23.10.2017
comment
Да, добавление /nologo помогло, фактически значительно ускорив процесс. Большое спасибо @Nik   -  person Steve Rukuts    schedule 23.10.2017
comment
Ок, отлично! Никаких сбоев или необработанных исключений, когда вы это делаете (изначально у меня была эта проблема)? Кстати, вы также можете добавить /nologo в ярлык AutoCAD на рабочем столе в поле Target для ваших пользователей. Это также поможет им загружать AutoCad намного быстрее. Если это решит ваши проблемы, я хотел бы опубликовать это как ответ, чтобы помочь кому-либо с такими же проблемами в будущем. Дай мне знать.   -  person Nik    schedule 23.10.2017
comment
Да, пожалуйста, опубликуйте это как ответ. Вы случайно не знаете, как выполнить команду NETLOAD через интерфейс командной строки? Я не могу найти никакой документации по этому поводу; есть какой нибудь сценарий?   -  person Steve Rukuts    schedule 23.10.2017
comment
Я не совсем понимаю, что вы имеете в виду. Чего вы пытаетесь достичь с помощью NETLOAD?   -  person Nik    schedule 23.10.2017
comment
Я запускаю NETLOAD, чтобы выбрать DLL, которую я хочу загрузить в AutoCAD. После загрузки мои пользовательские функции доступны через консоль в приложении.   -  person Steve Rukuts    schedule 23.10.2017
comment
Правильно. Поправьте меня, если я ошибаюсь, вы ищете способ автоматической загрузки библиотеки DLL NETLOAD, чтобы вашим пользователям не приходилось думать об этом?   -  person Nik    schedule 23.10.2017
comment
Собственно, это просто для того, чтобы я мог легко развиваться. CAD Bloke написал описание того, как это сделать, в качестве еще одного ответа на этот вопрос.   -  person Steve Rukuts    schedule 24.10.2017
comment
Честно говоря, я бы не рекомендовал идти по этому пути (не то чтобы в этом что-то не так, я просто не вижу смысла создавать больше скриптов, когда вы уже можете использовать существующие методы). См. Внизу моего ответа, как загружать DLL автоматически. Я бы сказал, что реестр - ваш лучший выбор. Установите и забудьте!   -  person Nik    schedule 24.10.2017


Ответы (2)


Это правда, API действительно большой, а некоторые функции плохо документированы. Мне было трудно приступить к работе, но как только я познакомился с основной концепцией и функциональностью, мне стало очень приятно работать с ним, так как API очень мощный и простой в работе, как только вы его «освоите». Я не уверен, какие источники вы проверили, но я начал с этой документации для разработчиков < / а>. Прокрутите вниз до учебных лабораторий. Я бы порекомендовал вам хотя бы прочитать лабораторные работы по ObjectARX и .NET. Потратьте несколько дней на работу в лабораториях .NET, так как это сэкономит вам бесчисленное количество часов.

Что касается отладки, приведенная ниже настройка должна дать вам наиболее эффективный и действенный подход (здесь я использую VS 2015 и AutoCad 2015). В свойствах проекта на вкладке «Отладка» ваши настройки должны быть следующими:

  1. Установите флажок «Запустить внешнюю программу:» и введите путь к исполняемому файлу AutoCad. Это касается других версий AutoCad.
  2. В поле «Аргументы командной строки:» введите /nologo. Это значительно ускорит запуск AutoCad.

введите описание изображения здесь

Чтобы загрузить вашу dll в AutoCad автоматически, вы можете сделать это либо через реестр (я предпочитаю), либо через acad20xxdoc.lsp или acad.lsp (AutoCad будет запускать эти скрипты по умолчанию для каждого открываемого вами документа. или при запуске AutoCad соответственно). Подробности можно найти в этот пост.

Теперь нажатие F5 запустит AutoCad и загрузит отладчик. Теперь вы можете перемещаться по строкам кода, как и любой другой фрагмент кода. Разместите точку останова в начале кода, затем выполните команду в AutoCad. Ваша точка останова должна быть достигнута.

Кроме того: /nologo также можно добавить на рабочий стол AutoCad, чтобы ускорить работу AutoCad для пользователей. Его можно добавить в поле «Цель:» в свойствах ярлыка. т.е. "C:\Program Files\Autodesk\AutoCAD 2015\acad.exe" /nologo

Примечание. Возможно, попался! Убедитесь, что для всех DLL AutoCad, на которые ссылается ваш проект, установлены следующие свойства:

  1. Встраивать типы взаимодействия -> False
  2. Копировать Local -> False. Также убедитесь, что в вашем каталоге Debug / Release нет файлов dll AutoCAD (т.е. acmgd.dll или любых dll с именами, начинающимися с "ac"). Удалите все, что найдете. В противном случае возникнут ошибки и сбои, которые будет очень сложно отследить.
person Nik    schedule 23.10.2017

Вы можете запустить сценарий при отладке NETLOAD для своей библиотеки DLL с помощью _ 1_ переключатель командной строки.

Добавьте что-то вроде следующего в конец того, что у вас уже есть в текстовом поле аргументов командной строки в Visual Studio

/b "C:\Path\To\Script\AutoNetLoadDebug.scr"

Сценарий с именем AutoNetLoadDebug.scr имеет содержимое, похожее на

netload "C:\Path\To\Dll\Your.dll"

Примечание: в конце этой строки должен быть перевод строки, чтобы она действительно выполняла команду. Убедитесь, что AutoCAD не настроен для загрузки этой библиотеки DLL или ее другой сборки. В этом случае запустите AutoCAD с другим профилем с помощью переключателя командной строки /p.

Вы не можете запускать что-либо из AutoCAD API вне AutoCAD, библиотеки DLL .NET - это просто сопоставления неуправляемого кода глубоко в недрах AutoCAD.

Я веду много журналов (Serilog), особенно при отладке. Также есть CADtest на Github, а также https://github.com/wtertinek/AcadTestRunner. Однажды я попытался издеваться над AutoCAD API. Один раз. Следовательно, CADtest.

Совет: пробуйте ловить везде и следите за нулевыми значениями, но вы, вероятно, уже это обнаружили.

Прочтите вики-страницу AutoCAD Tag и просмотрите другие упомянутые там форумы и блоги, они являются золотой жилой для знаний AutoCAD API.

person CAD bloke    schedule 24.10.2017