Compartilhar via


Compatibilidade entre 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ão para aplicativos

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 com suporte, 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 com suporte do runtime, com a primeira especificando a versão mais preferencial e a última especificando a versão menos preferencial.

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

Para obter mais informações, consulte Como configurar um aplicativo para dar 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 essa 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 um componente deve permanecer compatível em várias versões aplicando o System.Runtime.Versioning.ComponentGuaranteesAttribute atributo a esse componente. As ferramentas podem usar esse atributo para detectar 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 retroativamente com aplicativos desenvolvidos em versões anteriores do .NET Framework. Em outras palavras, aplicativos e componentes criados com versões anteriores funcionarão sem modificação 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 interrompida por alterações aparentemente inconseqüentes 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 concorrência que não ocorreu nas versões anteriores. 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. Além disso, cada versão do .NET Framework inclui correções de bug e alterações relacionadas à segurança que podem afetar a compatibilidade de alguns aplicativos e componentes.

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

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

  • Se você tiver um aplicativo .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 de ponto, ou se estiver desenvolvendo uma nova versão de um aplicativo ou componente direcionado ao .NET Framework 4.5 ou suas versões pontuais de uma base de código-fonte existente, verifique o que está obsoleto na Biblioteca de Classes em busca de 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 Runtime e, particularmente, o <Elemento AppContextSwitchOverrides>, para determinar se você pode usar uma configuração de runtime no arquivo de configuração do aplicativo para restaurar o comportamento anterior.

  • Se você encontrar um problema que não esteja 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 encontrar uma solução alternativa adequada para o problema, lembre-se de que o .NET Framework 4.5 (ou uma de suas versões pontuais) funciona paralelamente às versões 1.1, 2.0 e 3.5, e é uma atualização no local 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 no computador 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