Suprimir seletivamente avisos obsoletos personalizados


212

Estou usando o Obsoleteatributo (como sugerido por outros programadores) para mostrar um aviso se um determinado método for usado.

Existe uma maneira de suprimir o aviso semelhante ao CodeAnalysis ' SuppressMessagenos pontos em que o uso é justificado?

Obrigado!

EDITAR

Isso é [Obsolete("Some message")]porque eu preciso incluir alguns detalhes sobre o aviso. No entanto, #pragma warning disable 612não funciona mais quando adiciono a mensagem a nu[Obsolete] atributo ...

EDIT 2

Encontrado o número de aviso correto - é 618 se você tiver uma mensagem seguindo o atributo obsoleto.

Então, para fazer o que eu quero fazer:

#pragma warning disable 618

e depois da ligação

#pragma warning restore 618

Obrigado a Jared Par e Jon Skeet por me apontarem na direção certa!

Respostas:


257

Use #pragma warning disable:

using System;

class Test
{
    [Obsolete("Message")]
    static void Foo(string x)
    {
    }

    static void Main(string[] args)
    {
#pragma warning disable 0618
        // This one is okay
        Foo("Good");
#pragma warning restore 0618

        // This call is bad
        Foo("Bad");
    }
}

Restaure o aviso posteriormente para não perder chamadas "ruins".


1
Isso só funciona se eu não der uma mensagem com o meu atributo Obsoleto. Eu tenho uma mensagem assim: [Obsoleto ("É por isso que isso não deve ser usado - use XYZ.")]. Depois de inserir a mensagem, o aviso de pragma desativar 612 para de funcionar e estou recebendo avisos independentemente. Preciso de outro ID de erro, talvez?
975 Alex

2
Encontrei - o número de aviso correto é 618 se houver uma mensagem no atributo Obsoleto. Obrigado!
975 Alex

2
Goodo - ajustei meu exemplo para combinar com isso.
9139 Jon Skeet

6
@ George: Você pode encontrá-los aqui .
Jordão

3
Veja minha resposta sobre como obter o número de aviso / erro em primeiro lugar.
Aaron Thoma

130

A intenção é desativar o aviso para uso obsoleto , independentemente de a construção estar marcada com [Obsolete]ou [Obsolete("Message")]. Portanto, use o CS0612 e o CS0618 :

#pragma warning disable 612, 618 

...

#pragma warning restore 612, 618 

3
Observe também que os avisos não ocorrem se o uso obsoleto estiver em uma classe que é marcada como obsoleta.
Redcalx #

3
Existe uma maneira de desativar um erro também, caso tenha Obsoletesido marcado como um erro?
Shimmy Weitzhandler

2
@ Shimmy: se estiver marcado como um erro, você deve corrigi-lo, não há como suprimir erros. Pode ser um problema de sintaxe, poste-o como uma pergunta neste site e você certamente obterá uma boa resposta.
Jordão

18

Veja como obter o número de aviso / erro em primeiro lugar:

  1. Reconstrua seu projeto.
  2. Vá para a janela Saída .
  3. Procure a linha do aviso / erro que você deseja suprimir.
    Por exemplo:
    C:\Users\Username\Documents\Visual Studio 2010\Projects\Projectname\Classname.cs(203,7): warning CS0162: Unreachable code detected
  4. Copie a parte do número após " CS".
  5. Em seguida, prossiga como Jon Skeet diz .

(Melhor sempre proceder como Jon Skeet diz ...)


9

Você está procurando a #pragmadiretiva de desativação de aviso

Essencialmente, você adiciona o seguinte comando acima do site de chamada no arquivo .cs.

#pragma warning disable 612
SomeMethodCall

612 é o ID da mensagem de erro para chamar métodos obsoletos


Isso só funciona se eu não der uma mensagem com o meu atributo Obsoleto. Eu tenho uma mensagem assim: [Obsoleto ("É por isso que isso não deve ser usado - use XYZ.")]. Depois de inserir a mensagem, o aviso de pragma desativar 612 para de funcionar e estou recebendo avisos independentemente. Preciso de outro ID de erro, talvez?
975 Alex

2
Encontrei - o número de aviso correto é 618 se houver uma mensagem no atributo Obsoleto.
975 Alex
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.