Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Установка компонетов индивидуально для одного прое


Автор: ilyalyu 19.9.2010, 23:39
Вопрос такой. При разработке двух приложений используется один и тот же пакет компонентов. При работе над первым проектом потребовалось подправить исходники некоторых компонентов. Естественно, хочется, чтобы изменения, сделанные при работе над первым проектом, никак не влияли на второй проект. То есть хочется установить две копии одного и того же пакета: для первого проекта - исправленный вариант, для второго проекта - исходный вариант. Вопрос - как это сделать? Пока что при переключении с одного проекта на другой приходится удалять один вариант пакета и устанавливать вместо него другой. И так каждый раз. 

Автор: Proxin 20.9.2010, 01:06
самый простой вариант - написать наследников для каждого проекта.

Автор: kami 20.9.2010, 07:09
Можно использовать директивы условной компиляции, правда придется для каждого проекта делать вместо Compile - Build (что далеко не всегда удобно при каждой необходимости пересобрать экзешник + нужно, чтобы в SearchPath был прописан путь к "изменяемым" исходникам)

Например:

в правленном модуле
{$IFDEF myChanges}
// правленный код
{$ELSE}
// исходный код
{$ENDIF}

Для проекта, в котором нужен правленный код, в меню Project>Options>Directories, Conditionals>Conditional defines прописать myChanges.

P.S. А автор изменяемых исходников не против этого? smile 

Автор: Snowy 20.9.2010, 08:59
Положить копию компонентов в папку с проектом и править эту копию.
Тогда исправленный вариант будет действовать только на этот проект.
При компиляции будет использована эта копия, т.к. приоритет в поиске файлов у локальной папки выше, чем у библиотечной.

Автор: ilyalyu 20.9.2010, 10:59
Цитата
самый простой вариант - написать наследников для каждого проекта.


Это, конечно, самый последовательный метод, но отнюдь не самый простой. Изменить пару строчек в готовом компоненте гораздо быстрее.

Цитата
Положить копию компонентов в папку с проектом и править эту копию.


Этот вариант частично решает проблему. Но если в исправленом компоненте добавлены published properties, то его нужно установить. Тогда предложеный способ не поможет.

Пока придумал такой вариант: создавать для каждого проекта свою учетную запись Windows либо работать из под виртуальной машины. Тогда можно будет и индивидуальный Library path прописать и нужную версию компонент установить. Конечно, способ кривоват.

Автор: SeregaAltmer 23.9.2010, 21:21
Цитата(ilyalyu @  20.9.2010,  10:59 Найти цитируемый пост)

Цитата(Proxin @  20.9.2010,  01:06 Найти цитируемый пост)
самый простой вариант - написать наследников для каждого проекта.

Это, конечно, самый последовательный метод, но отнюдь не самый простой. Изменить пару строчек в готовом компоненте гораздо быстрее.


Цитата(ilyalyu @  20.9.2010,  10:59 Найти цитируемый пост)
Пока придумал такой вариант: создавать для каждого проекта свою учетную запись Windows либо работать из под виртуальной машины. Тогда можно будет и индивидуальный Library path прописать и нужную версию компонент установить. Конечно, способ кривоват.


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

Автор: northener 24.9.2010, 00:38
Я за
Цитата(kami @  20.9.2010,  07:09 Найти цитируемый пост)
Можно использовать директивы условной компиляции

Build вместо Compile не так уж и страшен. А вот написание на каждый чих наследников или более того плодить учетные записи - это уже перебор.

Автор: cat512 24.9.2010, 12:34
Цитата(northener @ 24.9.2010,  00:38)
Я за
Цитата(kami @  20.9.2010,  07:09 Найти цитируемый пост)
Можно использовать директивы условной компиляции

Build вместо Compile не так уж и страшен. А вот написание на каждый чих наследников или более того плодить учетные записи - это уже перебор.

+1
Они как раз для подобных вещей и предназначены!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)