Compatibilidade de versões

Compatibilidade com versões anteriores significa que um aplicativo que foi desenvolvido para uma versão específica de uma plataforma será executado em versões posteriores dessa plataforma. O .NET Framework tenta maximizar a compatibilidade com versões anteriores: O código-fonte escrito para uma versão do .NET Framework deve ser compilado em versões posteriores do .NET Framework e os binários executados em uma versão do .NET Framework devem se comportar de forma idêntica em versões posteriores do .NET Framework.

Compatibilidade de versões para aplicações

Por padrão, um aplicativo é executado na versão do .NET Framework para a qual foi criado. Se essa versão não estiver presente e o arquivo de configuração do aplicativo não definir versões suportadas, poderá ocorrer um erro de inicialização do .NET Framework. Nesse caso, a tentativa de executar o aplicativo falhará.

Para definir as versões específicas nas quais seu aplicativo é executado, adicione um ou mais <elementos supportedRuntime> ao arquivo de configuração do aplicativo. Cada <supportedRuntime> elemento lista uma versão suportada do tempo de execução, com o primeiro especificando a versão mais preferida e o último especificando a versão menos preferida.

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

Para obter mais informações, consulte Como configurar um aplicativo para oferecer suporte ao .NET Framework 4 ou 4.x.

Compatibilidade de versão para componentes

Um aplicativo pode controlar a versão do .NET Framework na qual ele é executado, mas um componente não pode. Componentes e bibliotecas de classes são carregados no contexto de um aplicativo específico, e é por isso que eles são executados automaticamente na versão do .NET Framework em que o aplicativo é executado.

Devido a esta restrição, as garantias de compatibilidade são especialmente importantes para os componentes. A partir do .NET Framework 4, você pode especificar o grau em que se espera que um componente permaneça compatível em várias versões aplicando o System.Runtime.Versioning.ComponentGuaranteesAttribute atributo a esse componente. As ferramentas podem usar esse atributo para detetar possíveis violações da garantia de compatibilidade em versões futuras de um componente.

Compatibilidade com versões anteriores

O .NET Framework 4.5 e versões posteriores são compatíveis com versões anteriores com aplicativos que foram criados com versões anteriores do .NET Framework. Em outras palavras, os aplicativos e componentes criados com versões anteriores funcionarão sem modificações no .NET Framework 4.5 e versões posteriores. No entanto, por padrão, os aplicativos são executados na versão do Common Language Runtime para o qual foram desenvolvidos, portanto, talvez seja necessário fornecer um arquivo de configuração para permitir que seu aplicativo seja executado no .NET Framework 4.5 ou versões posteriores. Para obter mais informações, consulte a seção Compatibilidade de versão para aplicativos anteriormente neste artigo.

Na prática, essa compatibilidade pode ser quebrada por alterações aparentemente inconsequentes no .NET Framework e alterações nas técnicas de programação. Por exemplo, melhorias de desempenho no .NET Framework 4.5 podem expor uma condição de corrida que não ocorreu em versões anteriores. Da mesma forma, usar um caminho codificado para assemblies do .NET Framework, executar uma comparação de igualdade com uma versão específica do .NET Framework e obter o valor de um campo privado usando reflexão não são práticas compatíveis com versões anteriores. Além disso, cada versão do .NET Framework inclui correções de bugs e alterações relacionadas à segurança que podem afetar a compatibilidade de alguns aplicativos e componentes.

Se seu aplicativo ou componente não funcionar como esperado no .NET Framework 4.5 ou em uma versão posterior, use as seguintes listas de verificação:

  • Se seu aplicativo foi desenvolvido para ser executado em qualquer versão do .NET Framework começando com o .NET Framework 4.0, consulte Compatibilidade de aplicativos para gerar listas de alterações entre a versão de destino do .NET Framework e a versão na qual seu aplicativo está sendo executado.

  • Se você tiver um aplicativo do .NET Framework 3.5, consulte também Problemas de migração do .NET Framework 4.

  • Se você tiver um aplicativo .NET Framework 2.0, consulte também Alterações no .NET Framework 3.5 SP1.

  • Se você tiver um aplicativo .NET Framework 1.1, consulte também Alterações no .NET Framework 2.0.

  • Se você estiver recompilando o código-fonte existente para ser executado no .NET Framework 4.5 ou em suas versões pontuais, ou se estiver desenvolvendo uma nova versão de um aplicativo ou componente destinado ao .NET Framework 4.5 ou suas versões pontuais a partir de uma base de código-fonte existente, verifique O que está obsoleto na biblioteca de classes para tipos e membros obsoletos, e aplique a solução alternativa descrita. (O código compilado anteriormente continuará a ser executado em tipos e membros que foram marcados como obsoletos.)

  • Se você determinar que uma alteração no .NET Framework 4.5 quebrou seu aplicativo, verifique o Esquema de Configurações de Tempo de Execução e, particularmente, o <Elemento AppContextSwitchOverrides, para determinar se você pode usar uma configuração de tempo de execução no arquivo de> configuração do seu aplicativo para restaurar o comportamento anterior.

  • Se você se deparar com um problema que não está documentado, abra um problema no site da Comunidade de Desenvolvedores para .NET ou abra um problema no repositório GitHub da Microsoft/dotnet.

Execução lado a lado

Se você não conseguir encontrar uma solução adequada para o 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 e é uma atualização in-loco que substitui a versão 4. Para aplicativos destinados às versões 1.1, 2.0 e 3.5, você pode instalar a versão apropriada do .NET Framework na máquina de destino para executar o aplicativo em seu melhor ambiente. Para obter mais informações sobre a execução lado a lado, consulte Execução lado a lado.

Consulte também