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

Обратная совместимость означает, что приложение, разработанное для конкретной версии платформы, будет запускаться и в более поздних версиях этой платформы.Backward compatibility means that an app that was developed for a particular version of a platform will run on later versions of that platform. На платформе .NET Framework в максимально возможной степени обеспечивается обратная совместимость: исходный код, написанный для одной версии платформы .NET Framework, должен компилироваться в более поздних версиях этой платформы, а двоичные файлы, работающие в одной версии платформы .NET Framework, должны точно так же работать в более поздних версиях этой платформы..NET Framework tries to maximize backward compatibility: Source code written for one version of .NET Framework should compile on later versions of .NET Framework, and binaries that run on one version of .NET Framework should behave identically on later versions of .NET Framework.

Совместимость версий приложенийVersion compatibility for apps

По умолчанию приложение запускается в той версии платформы .NET Framework, для которой оно было создано.By default, an app runs on the version of .NET Framework that it was built for. Если эта версия отсутствует и в файле конфигурации приложения не определены поддерживаемые версии, может произойти ошибка инициализации .NET Framework.If that version isn't present and the app configuration file doesn't define supported versions, a .NET Framework initialization error may occur. В этом случае попытка запустить приложение завершится сбоем.In this case, the attempt to run the app will fail.

Чтобы определить конкретные версии, в которых запускается приложение, добавьте в файл конфигурации этого приложения один или несколько элементов <supportedRuntime>.To define the specific versions on which your app runs, add one or more <supportedRuntime> elements to your app's configuration file. Каждый элемент <supportedRuntime> определяет поддерживаемую версию среды выполнения. При этом первый элемент указывает наиболее предпочтительную версию, а последний элемент — наименее предпочтительную версию.Each <supportedRuntime> element lists a supported version of the runtime, with the first specifying the most preferred version and the last specifying the least preferred version.

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

Дополнительные сведения см. в разделе Практическое руководство. Настройка приложения для поддержки платформы .NET Framework 4 или 4.x.For more information, see How to: Configure an App to Support .NET Framework 4 or 4.x.

Совместимость версий компонентовVersion compatibility for components

Приложение может определять версию платформы .NET Framework, в которой оно запускается, однако компонент не может.An app can control the version of the .NET Framework on which it runs, but a component can't. Компоненты и библиотеки классов загружаются в контексте конкретного приложения и, следовательно, автоматически запускаются в той версии .NET Framework, в которой запускается это приложение.Components and class libraries are loaded in the context of a particular app, and that's why they automatically run on the version of the .NET Framework that the app runs on.

Из-за этого ограничения гарантии совместимости особенно важны для компонентов.Because of this restriction, compatibility guarantees are especially important for components. Начиная с .NET Framework 4, можно задать, в какой степени компонент должен оставаться совместимым в различных версиях, применив к этому компоненту атрибут System.Runtime.Versioning.ComponentGuaranteesAttribute.Starting with the .NET Framework 4, you can specify the degree to which a component is expected to remain compatible across multiple versions by applying the System.Runtime.Versioning.ComponentGuaranteesAttribute attribute to that component. Этот атрибут может использоваться разными средствами для обнаружения возможных нарушений гарантии совместимости в будущих версиях компонента.Tools can use this attribute to detect potential violations of the compatibility guarantee in future versions of a component.

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

Платформа .NET Framework 4.5 и более поздних версий обратно совместима с приложениями, созданными с помощью более ранних версий .NET Framework.The .NET Framework 4.5 and later versions are backward-compatible with apps that were built with earlier versions of the .NET Framework. Иными словами, приложения и компоненты, созданные с использованием предыдущих версий платформы .NET Framework, будут без внесения изменений работать в .NET Framework 4.5 и более поздних версий.In other words, apps and components built with previous versions will work without modification on the .NET Framework 4.5 and later versions. Однако по умолчанию приложения выполняются в той версии среды CLR, для которой они были разработаны, поэтому, чтобы обеспечить возможность выполнения приложения в .NET Framework 4.5 и более поздних версий, может потребоваться предоставить файл конфигурации.However, by default, apps run on the version of the common language runtime for which they were developed, so you may have to provide a configuration file to enable your app to run on the .NET Framework 4.5 or later versions. Дополнительные сведения см. в разделе Совместимость версий для приложений выше.For more information, see the Version compatibility for apps section earlier in this article.

На практике эту совместимость можно нарушить на первый взгляд несущественными изменениями в платформе .NET Framework и изменениями в методах программирования.In practice, this compatibility can be broken by seemingly inconsequential changes in the .NET Framework and changes in programming techniques. Например, улучшения в производительности в платформе .NET Framework 4.5 могут привести к состоянию гонки, которого не было в предыдущих версиях.For example, performance improvements in the .NET Framework 4.5 can expose a race condition that did not occur on earlier versions. Следует также иметь в виду, что такие действия, как использование жестко запрограммированного пути к сборкам .NET Framework, сравнение на равенство с конкретной версией платформы .NET Framework и получение значения частного поля с помощью отражения, нарушают обратную совместимость.Similarly, using a hard-coded path to .NET Framework assemblies, performing an equality comparison with a particular version of the .NET Framework, and getting the value of a private field by using reflection are not backward-compatible practices. Кроме того, каждая версия платформы .NET Framework содержит исправления ошибок и изменения, связанные с безопасностью, которые могут влиять на совместимость некоторых приложений и компонентов.In addition, each version of the .NET Framework includes bug fixes and security-related changes that can affect the compatibility of some apps and components.

Если приложение или компонент не работает в .NET Framework 4.5 и в доработанных выпусках, .NET Framework 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2 или 4.8, ожидаемым образом, воспользуйтесь следующими контрольными списками:If your app or component doesn't work as expected on the .NET Framework 4.5 (including its point releases, the .NET Framework 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, or 4.8), use the following checklists:

  • Если приложение разработано для выполнения в любой версии платформы .NET Framework, начиная с .NET Framework 4.0, см. раздел Совместимость приложений, чтобы создать списки изменений между вашей целевой версией .NET Framework и версией, в которой выполняется приложение.If your app was developed to run on any version of the .NET Framework starting with the .NET Framework 4.0, see Application compatibility to generate lists of changes between your targeted .NET Framework version and the version on which your app is running.

  • Если приложение предназначено для .NET Framework 3.5, см. также раздел Проблемы при миграции на .NET Framework 4.If you have a .NET Framework 3.5 app, also see .NET Framework 4 Migration Issues.

  • Если приложение предназначено для .NET Framework 2.0, см. также раздел Изменения в .NET Framework 3.5 SP1.If you have a .NET Framework 2.0 app, also see Changes in .NET Framework 3.5 SP1.

  • Если приложение предназначено для .NET Framework 1.1, см. также раздел Изменения в .NET Framework 2.0.If you have a .NET Framework 1.1 app, also see Changes in .NET Framework 2.0.

  • Если вы перекомпилируете существующий исходный код для запуска в платформе .NET Framework 4.5 (или ее доработанных выпусках) или разрабатываете новую версию приложения или компонента для запуска в .NET Framework 4.5 или ее доработанных выпусках на основе существующей базы исходного кода, просмотрите раздел Что устарело в библиотеке классов на предмет устаревших типов и членов и используйте описанный обходной путь.If you're recompiling existing source code to run on the .NET Framework 4.5 or its point releases, or if you're developing a new version of an app or component that targets the .NET Framework 4.5 or its point releases from an existing source code base, check What's Obsolete in the Class Library for obsolete types and members, and apply the workaround described. (Скомпилированный ранее код будет продолжать работать с типами и членами, которые отмечены как устаревшие.)(Previously compiled code will continue to run against types and members that have been marked as obsolete.)

  • Если обнаруживается, что изменение в .NET Framework 4.5 нарушило работу приложения, обратитесь к разделу Схема параметров среды выполнения и, в частности, к подразделу Элемент <AppContextSwitchOverrides>, чтобы определить, можно ли использовать параметры среды выполнения в файле конфигурации приложения для восстановления предыдущего поведения.If you determine that a change in the .NET Framework 4.5 has broken your app, check the Runtime Settings Schema, and particularly the <AppContextSwitchOverrides> Element, to determine whether you can use a runtime setting in your app's configuration file to restore the previous behavior.

  • Если у вас возникла незадокументированная проблема, откройте проблему на веб-сайте сообщества разработчиков .NET или в репозитории GitHub Microsoft/dotnet.If you come across an issue that isn't documented, open a problem on the Developer Community site for .NET or open an issue in the Microsoft/dotnet GitHub repo.

Параллельное выполнениеSide-by-side execution

Если найти подходящий обходной путь для проблемы не удается, помните, что платформа .NET Framework 4.5 (или один из ее доработанных выпусков) работает параллельно с версиями 1.1, 2.0 и 3.5 и представляет собой обновление "на месте", заменяющее версию 4.If you can't find a suitable workaround for your issue, remember that .NET Framework 4.5 (or one of its point releases) runs side by side with versions 1.1, 2.0, and 3.5, and is an in-place update that replaces version 4. Для приложений, предназначенных для версий 1.1, 2.0 и 3.5, можно установить на целевом компьютере соответствующую версию .NET Framework и запускать приложение в оптимальной для него среде.For apps that target versions 1.1, 2.0, and 3.5, you can install the appropriate version of .NET Framework on the target machine to run the app in its best environment. Дополнительные сведения о параллельном выполнении см. в разделе Параллельное выполнение.For more information about side-by-side execution, see Side-by-Side Execution.

См. такжеSee also