Поделиться через


Совместимость версий

Обратная совместимость означает, что приложение, разработанное для конкретной версии платформы, будет работать на более поздних версиях этой платформы. .NET Framework пытается повысить обратную совместимость: исходный код, написанный для одной версии .NET Framework, должен компилироваться на более поздних версиях .NET Framework, а двоичные файлы, выполняемые в одной версии .NET Framework, должны вести себя одинаково в последующих версиях .NET Framework.

Совместимость версий для приложений

По умолчанию приложение выполняется в версии .NET Framework, для которой она была создана. Если эта версия отсутствует, а файл конфигурации приложения не определяет поддерживаемые версии, может возникнуть ошибка инициализации .NET Framework. В этом случае попытка запустить приложение завершится ошибкой.

Чтобы определить определенные версии, в которых работает приложение, добавьте один или несколько <поддерживаемых элементовRuntime> в файл конфигурации приложения. Каждый <supportedRuntime> элемент перечисляет поддерживаемую версию среды выполнения, при этом первый указывает наиболее предпочтительную версию и последнюю, указывающую наименее предпочтительную версию.

<configuration>
   <startup>
      <supportedRuntime version="v2.0.50727" />
      <supportedRuntime version="v4.0" />
   </startup>
</configuration>

Дополнительные сведения см. в статье "Практическое руководство. Настройка приложения для поддержки .NET Framework 4 или 4.x".

Совместимость версий для компонентов

Приложение может управлять версией платформы .NET Framework, в которой она выполняется, но компонент не может. Компоненты и библиотеки классов загружаются в контексте конкретного приложения, поэтому они автоматически запускаются в версии .NET Framework, на которой работает приложение.

Из-за этого ограничения гарантии совместимости особенно важны для компонентов. Начиная с .NET Framework 4, можно указать степень, в которой компонент должен оставаться совместимым в нескольких версиях, применяя System.Runtime.Versioning.ComponentGuaranteesAttribute атрибут к тому компоненту. Средства могут использовать этот атрибут для обнаружения потенциальных нарушений гарантии совместимости в будущих версиях компонента.

Обратная совместимость

Версии .NET Framework 4.5 и более поздних версий являются обратно совместимыми с приложениями, созданными с более ранними версиями .NET Framework. Другими словами, приложения и компоненты, созданные с использованием предыдущих версий, будут работать без изменений в .NET Framework 4.5 и более поздних версиях. Однако по умолчанию приложения выполняются в версии среды CLR, для которой они были разработаны, поэтому может потребоваться предоставить файл конфигурации, чтобы приложение выполнялось в .NET Framework 4.5 или более поздних версиях. Дополнительные сведения см. в разделе "Совместимость версий для приложений " выше в этой статье.

На практике эта совместимость может быть нарушена, казалось бы, несоотчетными изменениями в .NET Framework и изменениями в методах программирования. Например, улучшения производительности в .NET Framework 4.5 могут предоставлять состояние гонки, которое не произошло в предыдущих версиях. Аналогичным образом, использование жёстко заданного пути к сборкам .NET Framework, выполнение сравнения равенства с конкретной версией .NET Framework и получение значения закрытого поля с помощью рефлексии не являются обратно совместимыми практиками. Кроме того, каждая версия .NET Framework включает исправления ошибок и изменения, связанные с безопасностью, которые могут повлиять на совместимость некоторых приложений и компонентов.

Если приложение или компонент не работает должным образом в .NET Framework 4.5 или более поздней версии, используйте следующие контрольные списки:

  • Если приложение было разработано для запуска в любой версии .NET Framework, начиная с .NET Framework 4.0, ознакомьтесь с разделом "Совместимость приложений " для создания списков изменений между целевой версией .NET Framework и версией, в которой работает ваше приложение.

  • Если у вас есть приложение .NET Framework 3.5, также см. статью о проблемах миграции .NET Framework 4.

  • Если у вас есть приложение .NET Framework 2.0, также см. изменения в .NET Framework 3.5 с пакетом обновления 1 (SP1).

  • Если у вас есть приложение .NET Framework 1.1, также см. изменения в .NET Framework 2.0.

  • Если вы перекомпилируете существующий исходный код для запуска в .NET Framework 4.5 или его конечных выпусках, или если вы разрабатываете новую версию приложения или компонента, предназначенного для .NET Framework 4.5 или его точки выпуска из существующей базы исходного кода, проверьте , что устарело в библиотеке классов для устаревших типов и членов, и примените описанный обходной путь. (Ранее скомпилированный код будет продолжать выполняться для типов и элементов, помеченных как устаревшие.)

  • Если определить, что изменение в .NET Framework 4.5 сломало приложение, проверьте схему параметров среды выполнения и, в частности<, элемент AppContextSwitchOverrides>, чтобы определить, можно ли использовать параметр среды выполнения в файле конфигурации приложения для восстановления предыдущего поведения.

  • Если вы столкнулись с проблемой, которая не описана, откройте проблему на сайте сообщества разработчиков для .NET или откройте проблему в репозитории Microsoft/dotnet GitHub.

Параллельное выполнение

Если вы не можете найти подходящее решение для вашей проблемы, помните, что .NET Framework 4.5 (или одна из его промежуточных версий) может работать одновременно с версиями 1.1, 2.0 и 3.5 и является обновлением на месте установки, которое заменяет версию 4. Для приложений, предназначенных для версий 1.1, 2.0 и 3.5, можно установить соответствующую версию .NET Framework на целевом компьютере, чтобы запустить приложение в своей лучшей среде. Дополнительные сведения о параллельном выполнении см. в разделе " Параллельное выполнение".

См. также