Как мне написать код с уникальными разделами для разных версий .NET - PullRequest
1 голос
/ 17 сентября 2008

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

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

Ответы [ 4 ]

2 голосов
/ 17 сентября 2008

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

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

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

1 голос
/ 17 сентября 2008

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

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

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

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

При этом вы должны действительно понять причину, почему вы хотите / должны сделать это.

0 голосов
/ 17 сентября 2008

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

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

0 голосов
/ 17 сентября 2008

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

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

...