2008-09-17 4 views
1

Мой исходный код должен поддерживать как .NET версии 1.1, так и 2.0 ... как я могу проверить разные версии &, что лучше всего подходит для эта ситуация.Как написать код с уникальными разделами для разных версий .NET.

Мне интересно, если бы у меня были два раздела кода inline, в отдельных классах, методы и т. Д. Как вы думаете?

ответ

1

Если вы хотите сделать что-то подобное, вам понадобятся команды препроцессора и условные символы компиляции.

Я хотел бы использовать символы, которые явно указывают на версию .NET вы ориентируетесь (скажем, NET11 и NET20), а затем обернуть соответствующий код, как это:

#if NET11 
// .NET 1.1 code 
#elif NET20 
// .NET 2.0 code 
#endif 

Причиной, побуждающей делать это таким образом, вместо того, простой if/else - дополнительный уровень защиты, если кто-то забывает определить символ.

Это, как говорится, вы должны действительно рассказать о причине, по которой вы хотите/должны это сделать.

0

Я бы задал вопрос о том, ПОЧЕМУ вы должны поддерживать две базы кода, я бы выбрал один и пошел с ним, если есть какие-либо шансы на это.

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

+0

Цель состоит в том, чтобы иметь одну базу кода, которая поддерживает создание для любой целевой платформы. – minty 2008-09-17 17:53:40

2

Здесь представлено множество различных вариантов. Там, где я работаю, мы используем правки #if, но это также можно сделать с отдельными сборками для отдельных версий.

В идеале вы должны хотя бы сохранить код, зависящий от версии, в отдельных файлах частичного класса и сделать правильную версию доступной во время компиляции. Я бы соблюдал это, если бы мог вернуться в прошлое, наша база кода теперь имеет много правых правых форматов #if, и иногда это может быть трудно справиться. Худшая часть всего #if прагмы заключается в том, что Visual Studio просто игнорирует все, что не будет компилироваться с текущими определениями, и поэтому очень легко проверить нарушения.

NUnit поддерживает как 1.1, так и 2.0, и поэтому является хорошим выбором для тестовой структуры. Не слишком сложно использовать что-то вроде NAnt, чтобы сделать отдельные сборки 1.1 и 2.0, а затем автоматически запускать тесты NUnit.

0

У нас была эта проблема, и мы закончили с «уровнем совместимости», где мы реализовали единый набор интерфейсов и код утилиты для .NET v1.1 и v2.0.

Тогда наш установщик установил правильный код для правильной версии. Мы использовали NSIS (бесплатно!), И у них есть функции, которые вы можете вызвать, чтобы определить версию .NET.

Смежные вопросы