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

ADN Club => AutoCAD .NET API => Тема начата: Павел55 от 27-11-2020, 16:04:29

Название: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Павел55 от 27-11-2020, 16:04:29
Доброго времени суток. Пока что идея такая - написать консольное приложение, которое будет копировать проект, написанный для самой младшей версии AutoCAD и в каждой копии менять ссылки на библиотеки и версию net framework, потом все это дело компилировать и все dll  с соответствующими версии суффиксом собирать в одну папку. Есть ли какие то нормальные способы сразу пересобирать свое приложение под несколько версий AutoCAD?
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Александр Ривилис от 27-11-2020, 16:11:45
Есть ли какие то нормальные способы сразу пересобирать свое приложение под несколько версий AutoCAD?
Скачай MGDDBG - в его составе solution и проекты под различные версии AutoCAD. Всё собирается одной кнопкой Build Solution.
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Вильдар от 27-11-2020, 16:31:59
Кажется, самый правильный способ использовать Condition в msbuild - переключать фрейморк и ссылки в зависимости от выбранной конфигурации. Тут надо покурить msbuild  ;D
У меня нет необходимости это сейчас делать.
Но из нескольких вариантов, этот самый удобный кажется. Другой вариант, делать по проекту на каждую версию автокада.

MgdDbg отсюда?
https://github.com/ADN-DevTech/MgdDbg
Там под одну версию 2017.
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Дмитрий Загорулькин от 27-11-2020, 16:50:43
MgdDbg отсюда?
Нееее... Там уже почти труп )
Вот тут есть ссылки в шапке: https://adn-cis.org/forum/index.php?topic=7274.0
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Павел55 от 27-11-2020, 17:13:40
Есть ли какие то нормальные способы сразу пересобирать свое приложение под несколько версий AutoCAD?
Скачай MGDDBG - в его составе solution и проекты под различные версии AutoCAD. Всё собирается одной кнопкой Build Solution.
То есть один раз нажал и сразу под все версии пере собирается?
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Александр Ривилис от 27-11-2020, 17:17:29
То есть один раз нажал и сразу под все версии пере собирается?
Именно. И одни и те же исходники. Посмотри то, что я тебе сказал.
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Вильдар от 27-11-2020, 17:22:35
Вон Саня че творит  :o ;D 8)
https://github.com/ModPlus-Software/AutoCAD_mpESKD
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Александр Ривилис от 27-11-2020, 17:23:36
MgdDbg отсюда?
Позор! За 6 лет пребывания на форуме ты еще не запомнил где и что брать? ;)
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Вильдар от 27-11-2020, 17:34:07
У меня есть. Я думал может новый проект появился  ;D
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Yusuf от 28-11-2020, 09:07:07
Именно. И одни и те же исходники. Посмотри то, что я тебе сказал.
а как это сделано не могу понять?
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Александр Ривилис от 28-11-2020, 19:15:02
Именно. И одни и те же исходники. Посмотри то, что я тебе сказал.
а как это сделано не могу понять?
Для каждого Project в Solution свои настройки на сборки AutoCAD и версии .NET Framework. И кроме того еще костанты (вида AC20XX) для ветвления в зависимости от версии AutoCAD:
Например:
Код - C# [Выбрать]
  1. #if !AC2018  && !AC2019 && !AC2021
  2.       Application.BeginQuit += new EventHandler(event_BeginQuit);
  3. #else
  4.       Application.BeginQuit += new BeginQuitEventHandler(event_BeginQuit);
  5. #endif

Или:
Код - C# [Выбрать]
  1. #if !AC2018 && !AC2019 && !AC2021
  2.       FileDependencyManager fileDepMgr = e.ObjToSnoop as FileDependencyManager;
  3.             if (fileDepMgr != null) {
  4.                 Stream(snoopCollector.Data(), fileDepMgr);
  5.                 return;
  6.             }
  7. #endif
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Дмитрий Загорулькин от 29-11-2020, 15:01:42
а как это сделано не могу понять?
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Yusuf от 29-11-2020, 15:24:50
а как это сделано не могу понять?

Спасибо я видел Ваши ролики, еще когда только начинал за что тоже большое спасибо, у Вас вставляются в новый проект все файлы как ссылки, а в MgdDbg не понял как создавались проекты, так как нет для каждого проекта отдельной папки.
Для каждого Project в Solution свои настройки на сборки AutoCAD и версии .NET Framework. И кроме того еще костанты (вида AC20XX) для ветвления в зависимости от версии AutoCAD:
а до этого как сделано как созданы проекты без папок?
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Александр Ривилис от 29-11-2020, 16:48:44
а до этого как сделано как созданы проекты без папок?
Да как угодно. Можно создать пустой проект и добавить его в решение. Можно просто скопировать готовый проект, добавить его в решение и настроить. Ну и конечно не забыть добавить *.cs-файлы из общего каталога.
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Yusuf от 29-11-2020, 19:30:30
а до этого как сделано как созданы проекты без папок?
Да как угодно. Можно создать пустой проект и добавить его в решение. Можно просто скопировать готовый проект, добавить его в решение и настроить. Ну и конечно не забыть добавить *.cs-файлы из общего каталога.
Но при создании проекта все равно же создается папка и как тут добавлены *.cs файлы во все проекты, вроде не как ссылкой вставлены?
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: trir от 29-11-2020, 23:55:34
ссылкой и вставлены
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Александр Ривилис от 30-11-2020, 00:28:21
а до этого как сделано как созданы проекты без папок?
Да как угодно. Можно создать пустой проект и добавить его в решение. Можно просто скопировать готовый проект, добавить его в решение и настроить. Ну и конечно не забыть добавить *.cs-файлы из общего каталога.
Но при создании проекта все равно же создается папка и как тут добавлены *.cs файлы во все проекты, вроде не как ссылкой вставлены?
(https://live.staticflickr.com/65535/50662375152_064f5cef3a_o.jpg)

Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Yusuf от 30-11-2020, 07:32:21
ссылкой и вставлены
у ссылок разве иконки такие?
Я до сих пор туплю кажется это все что то очевидное но не могу понять.
Пробовал пустой Solution1 создать, затем пустой проект Project1 создаю, создается папка Project с файлами и папками, переношу их  после этого вручную переношу их на одну папку вверх в папку Solution1.  Удалил в VS Project1, потом пробовал в папку Solution1 добавить существующий элемент и выбрать перенесеный вручную в папку Solution1 файл Project1.cspros то добавляется она она в папке Solution Items, а не так отдельно как в решении MgdDbg.
Пробовал добавить в решение MgdDbg добавить свой существующий проект как ссылки там иконки разные же?

(https://i.postimg.cc/YvNkDn3d/1212.jpg) (https://postimg.cc/YvNkDn3d)
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: avc от 30-11-2020, 15:30:01
AutoCAD и .Net имеют прекрасную обратную совместимость. Все, что я компилирую для AutoCAD 2013 прекрасно работает во всех последующих версиях. Зачем разводить огород, там где он не нужен? API не измениняется (ну почти). А что изменилось - можно на крайний случай вызвать через reflection. Я не утверждаю что это лучшая практика. Конечно, тому кто "вкурил" msbilder не проблема собрать пачку проектов сразу. А на любительском уровне - вполне можно обойтись одной dll.
Есть обратная сторона медали: чем больше проектов в солюшене, тем больше тормозит VS и дольше вставлять новые файлы кода. С моими over 50 проектами ( всего по 2 на плагин) работать невозможно - минутный лаг после каждого клика. Приходится писать код в отдельном проекте, не открывая солюшн. А если б я еще добавил по 10 проектов для версий AutoCAD?...
А ссылки вы похоже вставлять не научились. Там у кнопки Добавить в форме выбора существующего файла, есть выпадающий список и в нем "Добавить как связь". А иначе копия файла в проект вставляется.
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Yusuf от 30-11-2020, 16:26:16
А ссылки вы похоже вставлять не научились. Там у кнопки Добавить в форме выбора существующего файла, есть выпадающий список и в нем "Добавить как связь". А иначе копия файла в проект вставляется.
Я так и вставил обратите внимание на иконки
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Дмитрий Загорулькин от 01-12-2020, 11:58:02
Все, что я компилирую для AutoCAD 2013 прекрасно работает во всех последующих версиях. Зачем разводить огород, там где он не нужен? API не измениняется (ну почти).
Я тоже так считал. Но потом столкнулся неоднократно с ситуациями, когда из-за старых ссылок ломалась работа приложения в новых версиях. Причём, в одном случае, почему-то только у некоторых пользователей. Я тогда кучу времени потратил на поиск причины. Мне пришлось посидеть плотно за ПК пользователя. Я устанавливал и переустанавливал фреймворки, полностью переустановил все продукты Autodesk, драйверы и т.п. Одна и та же ОС, одна и та же версия AutoCAD, одна и та же версия моего приложения, один и тот же чертёж. Даже ПК идентичны, т.к. из одной партии закупки! Но у одного пользователя всё ок, а у другого - не работает как надо! Причём, никаких ошибок - фаталов, исключений и тп. Просто тупо не работает! И только когда я пересобрал приложение с подходящими для версии AutoCAD Dll, всё починилось. У меня в приложении, конечно, много чего специфического используется - Overrule, P/Invoke, COM(dynamic) и т.п. Допускаю, что если бы было более простое приложение, то с такими проблемами я бы не столкнулся. Но, после этого, я стал пересобирать для каждой версии с её ссылочными DLL. Мне несложно настроить проекты, зато проблем подобного рода у пользователей уже точно не будет.
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Дмитрий Загорулькин от 01-12-2020, 12:06:54
А так, вот, например, из последнего: https://adn-cis.org/forum/index.php?topic=9158.0
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: avc от 01-12-2020, 12:24:17
вот, например, из последнего
Отличный пример, того, что изменения в API отлавливаются сразу и легко. В сообщении об ошибке четко написано какой именно метод изменился и как именно. И так же легко лечатся через reflection или все-таки добавлением одной сборки (но не десятков же).
Моя-то мысль о том, что надо трезво оценить свои затраты на поддержку пачки проектов вместо одного. Если делать один плагин (чтоб продать и забыть) - то вполне можно вместо одного проекта сделать 10. И совсем другое дело если проектов и так 66 и их надо будет развивать, обновлять, пересобирать, перепаковывать. Тут переход на 666 проектов внесет такие издержки, что уж лучше раз в 3 года поотлавливать один тяжелый глюк.
Ну и конечно я писал про .Net API, а не про P/Invoke, COM(dynamic), недокументированные вызовы и все такое прочее. Так-то и под каждую локализацию и под каждую Windows по хорошему надо собирать отдельный проект.
Название: Re: Как автоматизировать сборку под разные версии AutoCAD
Отправлено: Дмитрий Загорулькин от 01-12-2020, 13:03:33
Отличный пример, того, что изменения в API отлавливаются сразу и легко.
Эта ошибка проявляется только во время выполнения в определённых версиях AutoCAD. Разве это "сразу и легко"?
Так-то и под каждую локализацию и под каждую Windows по хорошему надо собирать отдельный проект.
Если требуется адаптировать приложение на разные языки, то это делается с помощью локализации ресурсов. Не надо отдельный проект делать.
Под версии Windows тоже не требуется разные проекты делать, т.к. .NET приложения ориентируются не на версию Windows, а на версию .NET Framework.
Моя-то мысль о том, что надо трезво оценить свои затраты на поддержку пачки проектов вместо одного. Если делать один плагин (чтоб продать и забыть) - то вполне можно вместо одного проекта сделать 10. И совсем другое дело если проектов и так 66 и их надо будет развивать, обновлять, пересобирать, перепаковывать. Тут переход на 666 проектов внесет такие издержки, что уж лучше раз в 3 года поотлавливать один тяжелый глюк.
Так кто же спорит, делай как удобнее. Это же твои проекты ) Главное, делать это осознанно, понимая все возможные последствия.