ADN Club > AutoCAD .NET API

Как ограничивать версии API для отдельных методов/участков кода?

(1/1)

Georg:
Доброго дня, такой вопрос ... чтобы сделать код универсальным для разных версий API (где используется библиотека) иногда делают такие вставки:


--- Код - C# [Выбрать] ---#if AUTOCAD_2009        defaultMText.TextStyle =           textStyle.ObjectId;#else        defaultMText.TextStyleId =          textStyle.ObjectId;#endif
А где документировано как это использовать? Вводится типа "область видимости" для конкретных библиотек (сборок) API? В частности я вот использовал новейшие Update's (Civil 3D 2022.1), и библиотеки вообще не работают у пользователя с голым 2022 (даже если эти функции не задействуются) ... как такие конструкции применять?

Александр Ривилис:
Georg,
Собственно говоря есть два варианта:
1) Использовать препроцессор (как в твоем коде) и тогда нужно компилировать под разные версии, получая разные dll-файлы. Пример можно подсмотреть в MGDDBG: https://adn-cis.org/forum/index.php?topic=7274.0
2) Использовать Reflection для вызова методов/свойств в зависимости от версии AutoCAD/Civil (проверяя версию). Проверить версию можно различными способами. Некоторые из них озвучены здесь: https://adn-cis.org/forum/index.php?topic=10315.0
И еще обсуждалось здесь: https://adn-cis.org/forum/index.php?topic=10180.0

--- Цитата: Georg от 01-01-2022, 15:50:04 ---В частности я вот использовал новейшие Update's (Civil 3D 2022.1), и библиотеки вообще не работают у пользователя с голым 2022 (даже если эти функции не задействуются)
--- Конец цитаты ---
А вот это странно. Нужно эти проблемы диагностировать, так как такого быть не должно. Что происходит? Не грузится эта dll или происходит Exception при выполнении кода из неё?

Georg:
Тут библиотека используется в Dynamo ... а у него логика видать такая, что если библиотека содержит методы, не регламентированные/не существующие в рамках данных системных библиотек текущей версии, пользователь вообще не увидит ни один метод библиотеки ... и там увы только 1 dll может использоваться  :-\ :-\ :-\. Платформа отвратительная по части "нормального кода", одни костыли и ограничения ... Вариант с несколькими dll не прокатит даже, так как эта библиотека при загрузке никак не прогружается в программу. Смотрится заголовочная строка dll (под какую крайнюю версию он собирался) и если используемые зависимости новее текущего будет ошибка.

Для случая "классического плагина" да, большое спасибо за варианты, буду их использовать, а тут боюсь ничего не поможет (только управлять версиями пакета добавляя/убирая методы из свежих релизов). Либо выводя это в отдельный "пакет методов/бибилиотеку", но это неудобно с позиции обновления таких частей.

Навигация

[0] Главная страница сообщений

Перейти к полной версии