Obsolescências na biblioteca de classes do .NET Framework
O .NET Framework mudou com o passar do tempo. Cada nova versão adicionou novos tipos e membros de tipo que ofereceram novas funcionalidades. Os tipos existentes e seus membros também mudaram com o passar do tempo. Por exemplo, alguns tipos se tornaram menos importantes conforme as tecnologias compatíveis foram sendo substituídas por novas tecnologias, e alguns métodos foram substituídos por métodos mais novos e melhores de certa forma.
O .NET Framework e o Common Language Runtime procuram dar suporte à compatibilidade com versões anteriores (permitindo que aplicativos desenvolvidos com uma versão do .NET Framework sejam executados na próxima versão do .NET Framework). Isso dificulta a simples remoção de um tipo ou de um membro de tipo. Em vez disso, o .NET Framework indicava que um tipo ou um membro de tipo não devia mais ser usado marcando-o como obsoleto ou preterido. Ao obsoletar um tipo ou membro, os desenvolvedores estavam cientes de que ele iria embora e tinham tempo para responder à sua remoção. No entanto, o código existente que usa o tipo ou o membro continua sendo executado na nova versão do .NET.
Observação
No .NET (Core), obsoletar uma API não significa necessariamente que a API será removida. Para saber mais, confira Remoção de API no .NET.
O atributo ObsoleteAttribute
O .NET Framework indica que um tipo ou um membro de tipo está obsoleto marcando-o com o atributo ObsoleteAttribute. A aplicação do atributo a um tipo ou um membro indica que esse tipo ou membro será removido em qualquer versão futura do .NET Framework sem interromper o código compilado que usa esse membro.
Além de indicar que um tipo ou membro de tipo é obsoleto, ObsoleteAttribute define como o compilador identifica o código-fonte que inclui esse tipo ou membro. O compilador pode compilar o código, mas emite uma mensagem de aviso, ou pode tratar o uso do tipo ou do membro como um erro. No primeiro caso, o código pode ser compilado com êxito, mas uma mensagem de aviso indica que o tipo ou o membro é obsoleto. No segundo caso, a compilação falha.
Mesmo se a compilação produzir um erro em vez de uma mensagem de aviso, o ObsoleteAttribute não afetará o comportamento do tempo de execução. Ou seja, os aplicativos que usam o tipo ou o membro e que são compilados com êxito sempre terão êxito. Somente a tentativa de recompilar um aplicativo que use o tipo ou o membro falha.
Como lidar com tipos e membros obsoletos
Quando você atualiza e depois recompila o código existente, o uso de um tipo ou de um membro obsoleto que produza um aviso do compilador em seu aplicativo é aceitável. No entanto, você deve examinar a mensagem de aviso do compilador para determinar se você deve alterar o código do aplicativo. Se a mensagem não apontar para uma alternativa adequada, você deverá fazer o seguinte:
Altere seu código removendo o uso do tipo ou do membro, se possível.
-ou-
Examine a documentação dessa área de tecnologia para determinar como responder à substituição.
Você pode optar por não recompilar o código existente em comparação com uma versão posterior do .NET Framework. Em vez disso, você pode especificar a versão do .NET Framework na qual o código existente compilado é executado. Por exemplo, suponhamos que você tenha um aplicativo chamado app1.exe, compilado no .NET Framework 3.5, mas queira que o aplicativo seja executado no .NET Framework 4.5. Isso exige as seguintes etapas:
Crie um arquivo de configuração para o executável principal e denomine-o appName.exe.config, em que appName é o nome do executável do aplicativo. Para o aplicativo chamado app1.exe em nosso exemplo, você criaria um arquivo de configuração chamado app1.exe.config.
Adicione o seguinte ao arquivo de configuração.
<configuration> <startup> <supportedRuntime version="v4.0" /> </startup> </configuration>
Para direcionar uma versão específica de .NET Framework, atribua um dos seguintes valores de cadeia de caracteres ao atributo version
:
Versão do .NET Framework | Cadeia de caracteres version |
---|---|
4.8 (incluindo 4.8.1) | v4.0 |
4.7 (incluindo 4.7.1 e 4.7.2) | v4.0 |
4.6 (incluindo 4.6.1 e 4.6.2) | v4.0 |
4.5 (incluindo 4.5.1 e 4.5.2) | v4.0 |
4 | v4.0 |
3,5 | v2.0.50727 |
2,0 | v2.0.50727 |
1,1 | v1.1.4322 |
1,0 | v1.0.3705 |
APIs obsoletas para o .NET Framework 4.5 e versões posteriores
APIs obsoletas para versões anteriores
- Tipos obsoletos no .NET Framework 4
- Membros obsoletos no .NET Framework 4
- Lista obsoleta do .NET Framework 3.5
- Lista obsoleta do .NET Framework 2.0