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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
238
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

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

minty 17.09.2008 21:53

Здесь много разных вариантов. Там, где я работаю, мы используем прагмы #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, - это дополнительный уровень защиты на случай, если кто-то забудет определить символ.

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

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