Конфигурации сборки C # VS 2008 - использование разных классов для разных сборок - PullRequest
2 голосов
/ 09 июня 2010

Я пишу приложение, которое имеет два класса, которые предоставляют в основном одинаковую функциональность, но для разных ситуаций.Я хотел бы иметь три версии программного обеспечения - одну, где пользователь может изменить INI-файл, чтобы настроить программу для использования одного из двух классов, а затем одну версию, которая использует только один из двух классов.

Сейчас у меня это работает через INI-файл, но я бы хотел иметь возможность создавать версии, которые вообще не содержат код для ненужного класса.

Что такоелучший способ пойти по этому поводу?Моя текущая точка зрения заключается в том, что, поскольку оба класса являются производными от общего интерфейса, я просто добавлю условие времени компиляции, которое смотрит на активную конфигурацию сборки и решает, следует ли компилировать этот класс.Каков синтаксис, чтобы сделать это?

Заранее спасибо за вашу помощь и вклад!

Ответы [ 2 ]

1 голос
/ 09 июня 2010

Вы можете использовать условные символы компиляции, которые аналогичны тем, которые вы делали бы в C / C ++ с директивами прекомпилятора.

Например:

interface IThing {
}

#if PLATFORM_A

class ThingImplementation : IThing {
}

#endif

#if PLATFORM_B

class ThingImplementation : IThing {
}

#endif

Вы можете выбрать реализацию десайдера, добавив условный символ компиляции на вкладку «Сборка» в настройках вашего проекта.

Для очень простой реализации вам вообще не нужен интерфейс, просто удалите ненужный код на основе платформы, для которой вы компилируете (даже если интерфейс полезен для обеспечения согласованности).

class Thing {

#if PLATFORM_A

    Platform specific code

#endif

#if PLATFORM_B

    Platform specific code

#endif

}
1 голос
/ 09 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...