Как я должен писать код с уникальными разделами для разных версий .NET

StackOverflow https://stackoverflow.com/questions/85773

  •  01-07-2019
  •  | 
  •  

Вопрос

Мой исходный код должен поддерживать оба варианта.СЕТЕВЫЕ версии 1.1 и 2.0...как мне протестировать различные версии и как лучше всего справиться с этой ситуацией?

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top