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





Я бы спросил, ПОЧЕМУ вам нужно поддерживать две кодовые базы, я бы выбрал одну и пошел бы с ней, если есть хоть какой-то шанс.
Попытка синхронизировать две базы кода с количеством изменений и типов изменений будет очень сложной задачей, а процесс сборки для любой версии будет очень сложным.
Здесь много разных вариантов. Там, где я работаю, мы используем прагмы #if, но это также может быть сделано с отдельными сборками для отдельных версий.
В идеале вы должны, по крайней мере, сохранить код, зависящий от версии, в отдельных файлах частичного класса и сделать правильную версию доступной во время компиляции. Я бы применил это, если бы мог вернуться в прошлое, наша кодовая база теперь содержит множество прагм #if, и иногда с ними трудно справиться. Худшая часть всей прагмы #if заключается в том, что Visual Studio просто игнорирует все, что не компилируется с текущими определениями, и поэтому очень легко проверить критические изменения.
NUnit поддерживает как 1.1, так и 2.0, поэтому является хорошим выбором для тестовой среды. Нетрудно использовать что-то вроде NAnt для создания отдельных сборок 1.1 и 2.0, а затем автоматически запускать тесты NUnit.
У нас была эта проблема, и мы получили «уровень совместимости», где мы реализовали единый набор интерфейсов и служебный код для .NET v1.1 и v2.0.
Затем наш установщик заложил правильный код для нужной версии. Мы использовали NSIS (бесплатно!), И у них есть функции, которые вы можете вызвать для определения версии .NET.
Если вы хотите сделать что-то подобное, вам нужно будет использовать команды препроцессора и символы условной компиляции.
Я бы использовал символы, которые четко указывают версию .NET, на которую вы нацеливаетесь (скажем, NET11 и NET20), а затем оберните соответствующий код следующим образом:
#if NET11
// .NET 1.1 code
#elif NET20
// .NET 2.0 code
#endif
Причина, по которой это делается таким образом, а не просто if / else, - это дополнительный уровень защиты на случай, если кто-то забудет определить символ.
При этом вам действительно следует глубже понять причину, по которой вы хотите / должны это сделать.
Дело в том, чтобы иметь одну базу кода, которая поддерживает создание для любой целевой платформы.