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

Обратная совместимость означает, что приложение, разработанное для конкретной версии платформы, будет запускаться и в более поздних версиях этой платформы. платформа .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.5.

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

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

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

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

Платформа .NET Framework 4.5 и более поздних версий обратно совместима с приложениями, созданными с помощью более ранних версий .NET Framework. Иными словами, приложения и компоненты, созданные с использованием предыдущих версий платформы .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 SP1.

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

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

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

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

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

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

См. также