Compatibilidade de versão no .NET FrameworkVersion compatibility in the .NET Framework

Compatibilidade com versões anteriores significa que um aplicativo desenvolvido para uma versão específica de uma plataforma será executado em versões posteriores dessa plataforma.Backward compatibility means that an app that was developed for a particular version of a platform will run on later versions of that platform. O .NET Framework tenta maximizar a compatibilidade com versões anteriores: O código-fonte escrito para uma versão do .NET Framework deverá ser compilado em versões posteriores do .NET Framework e os binários executados em uma versão do .NET Framework deverão se comportar de forma idêntica em versões posteriores do .NET Framework.The .NET Framework tries to maximize backward compatibility: Source code written for one version of the .NET Framework should compile on later versions of the .NET Framework, and binaries that run on one version of the .NET Framework should behave identically on later versions of the .NET Framework.

Compatibilidade de versão para aplicativosVersion compatibility for apps

Por padrão, um aplicativo executado na versão do .NET Framework para o qual foi compilado.By default, an app runs on the version of the .NET Framework that it was built for. Se essa versão não estiver presente e o arquivo de configuração de aplicativos não definir versões compatíveis, um erro de inicialização do .NET Framework poderá ocorrer.If that version isn't present and the app configuration file doesn't define supported versions, a .NET Framework initialization error may occur. Nesse caso, a tentativa de executar o aplicativo falhará.In this case, the attempt to run the app will fail.

Para definir as versões específicas nas quais seu aplicativo é executado, adicione um ou mais elementos <supportedRuntime> ao arquivo de configuração de aplicativo.To define the specific versions on which your app runs, add one or more <supportedRuntime> elements to your app's configuration file. Cada elemento <supportedRuntime> lista uma versão compatível do tempo de execução, com o primeiro especificando a versão mais preferida e o último especificando a versão menos preferida.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>

Para obter mais informações, confira Como: Configurar um aplicativo para dar suporte ao .NET Framework 4 ou 4.x.For more information, see How to: Configure an App to Support .NET Framework 4 or 4.x.

Compatibilidade de versão para componentesVersion compatibility for components

Um aplicativo pode controlar a versão do .NET Framework no qual é executado, mas um componente não pode.An app can control the version of the .NET Framework on which it runs, but a component can't. Os componentes e as bibliotecas de classe são carregados no contexto de um aplicativo específico e é por isso que são executados automaticamente na versão do .NET Framework em que o aplicativo é executado.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.

Por conta dessa restrição, as garantias de compatibilidade são especialmente importante para componentes.Because of this restriction, compatibility guarantees are especially important for components. Desde o .NET Framework 4, você pode especificar o grau em que um componente deve permanecer compatível em várias versões aplicando o atributo System.Runtime.Versioning.ComponentGuaranteesAttribute ao componente.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. As ferramentas podem usar esse atributo para detectar potenciais violações da garantia de compatibilidade em futuras versões de um componente.Tools can use this attribute to detect potential violations of the compatibility guarantee in future versions of a component.

Compatibilidade com versões anteriores e o .NET FrameworkBackward compatibility and the .NET Framework

O .NET Framework 4.5 e as versões posteriores são compatíveis com versões anteriores de aplicativos que foram compilados com versões anteriores do .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. Em outras palavras, aplicativos e componentes compilados com versões anteriores funcionarão sem modificação no .NET Framework 4.5 e versões posteriores.In other words, apps and components built with previous versions will work without modification on the .NET Framework 4.5 and later versions. No entanto, por padrão, como os aplicativos são executados na versão do Common Language Runtime para a qual foram desenvolvidos, talvez você precise fornecer um arquivo de configuração para permitir que seu aplicativo seja executado no .NET Framework 4.5 ou versões posteriores.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. Para saber mais, confira a seção Compatibilidade de versão para aplicativos, anteriormente neste artigo.For more information, see the Version compatibility for apps section earlier in this article.

Na prática, essa compatibilidade pode ser desfeita por alterações aparentemente inconsequentes feitas no .NET Framework e por alterações em técnicas de programação.In practice, this compatibility can be broken by seemingly inconsequential changes in the .NET Framework and changes in programming techniques. Por exemplo, as melhorias de desempenho no .NET Framework 4.5 podem expor uma condição de corrida que não ocorria em versões anteriores.For example, performance improvements in the .NET Framework 4.5 can expose a race condition that did not occur on earlier versions. Da mesma forma, o uso de um caminho codificado para assemblies do .NET Framework, a execução de uma comparação de igualdade com uma versão específica do .NET Framework e a obtenção do valor de um campo particular usando-se reflexão não são práticas compatíveis com versões anteriores.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. Além disso, cada versão do .NET Framework inclui correções de bug e mudanças relacionadas à segurança que podem afetar a compatibilidade de alguns aplicativos e componentes.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.

Se o aplicativo ou o componente não funcionar conforme esperado no .NET Framework 4.5 (incluindo suas versões de ponto, o .NET Framework 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2 ou 4.8), use as seguintes listas de verificação: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:

Compatibilidade e execução lado a ladoCompatibility and side-by-side execution

Se você não conseguir encontrar uma solução alternativa adequada para seu problema, lembre-se de que o .NET Framework 4.5 (ou uma de suas versões pontuais) é executado lado a lado com as versões 1.1, 2.0 e 3.5, além de ser uma atualização in-loco que substitui a versão 4.If you can't find a suitable workaround for your issue, remember that the .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. Para aplicativos que segmentam as versões 1.1, 2.0 e 3.5, é possível instalar a versão do .NET Framework adequada no computador de destino para executar o aplicativo em seu melhor ambiente.For apps that target versions 1.1, 2.0, and 3.5, you can install the appropriate version of the .NET Framework on the target machine to run the app in its best environment. Para saber mais sobre a execução lado a lado, confira Side-by-Side Execution (Execução lado a lado).For more information about side-by-side execution, see Side-by-Side Execution.

Consulte tambémSee also