Udostępnij za pośrednictwem


W obszarze Przegląd Tłumienie źródła

Tłumienie w źródło jest zdolność do likwidowania i Ignoruj naruszeń analizy kodu w kodzie zarządzanym przez dodanie SuppressMessage przypisać do segmentów kodu, które powodują naruszeń.SuppressMessage atrybut jest atrybutem warunkowego, który wchodzi w metadane IL swojego zespołu kodu zarządzanego, tylko wtedy, gdy symbol kompilacji CODE_ANALYSIS jest zdefiniowany w czasie kompilacji.

C + +/ CLI, używać makr, CA_SUPPRESS_MESSAGE lub CA_GLOBAL_SUPPRESS_MESSAGE w pliku nagłówka, aby dodać atrybut.

Nie należy używać w źródło suppressions w trybie budowania wersji zapobiegające przypadkowo wysyłki metadanych tłumienia w źródła.Ze względu na koszty przetworzenia tłumienia w source wydajność aplikacji może być znacznie dołączając metadanych tłumienia w źródła.

[!UWAGA]

Nie masz pod ręką kod tych atrybutów samodzielnie.Aby uzyskać więcej informacji, zobacz Jak: pomija ostrzeżenia, przy użyciu elementu Menu.Element menu nie jest dostępna dla kodu C++.

Atrybut SuppressMessage

Po kliknięciu prawym przyciskiem myszy ostrzeżenia analizy kodu w Lista błędów a następnie kliknij przycisk Pomiń wiadomości, SuppressMessage w kodzie lub do pliku globalnego suppressions projektu zostanie dodany atrybut.

SuppressMessage atrybut ma następujący format:

<Scope:SuppressMessage("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")>
[Scope:SuppressMessage("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")]

[C++]

CA_SUPPRESS_MESSAGE("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")

Gdzie:

  • Artykuł kategorii -kategorii, w którym reguła jest zdefiniowany.Aby uzyskać więcej informacji na temat kategorii reguł analizy kodu, zobacz Analizy kodu zarządzanego kodu ostrzeżenia.

  • Artykuł Id -identyfikator reguły.Obsługa obejmuje zarówno krótko- i nazwę dla identyfikatora reguły.Krótka nazwa jest CAXXXX; długa nazwa jest CAXXXX:FriendlyTypeName.

  • Uzasadnienie -tekst, który jest używany do dokumentowania przyczyny do tłumienia wiadomości.

  • Identyfikator wiadomości -unikatowy identyfikator problemu dla każdej wiadomości.

  • Zakres -miejsce docelowe, na którym ostrzeżenie jest pomijane.Jeśli obiekt docelowy nie jest określony, ustawiana jest do obiektu docelowego atrybutu.Oto obsługiwane zakresy:

    • Moduł

    • Przestrzeń nazw

    • Zasób

    • Typ

    • Członek

  • Miejsce docelowe - identyfikator, który pozwala określić miejsce docelowe, na którym ostrzeżenie jest pomijane.To musi zawierać nazwę elementu pełną.

Sposób użycia SuppressMessage

Kod analizy ostrzeżenia będą pomijane na poziomie, do którego wystąpienie SuppressMessage stosowany jest atrybut.Celem niniejszego jest ściśle połączenie informacji tłumienia do kodu, gdzie występuje naruszenie.

Powszechną formą tłumienia zawiera kategorię reguły i identyfikator reguły, która zawiera czytelny dla człowieka reprezentację opcjonalna nazwa reguły.Na przykład:

[SuppressMessage("Microsoft.Design", "CA1039:ListsAreStrongTyped")]

Jeśli istnieją powody ścisłego przestrzegania służących zminimalizowaniu tłumienia w źródło metadanych, sama nazwa reguły można pominąć.Kategoria reguły wraz z jego identyfikator reguły stanowić wystarczająco unikatowy identyfikator reguły.Na przykład:

[SuppressMessage("Microsoft.Design", "CA1039")]

Ten format nie jest zalecane z powodu problemów łatwość konserwacji.

Powstrzymywania naruszeń wielu w treści metody

Atrybuty można stosować tylko do metody i nie mogą być osadzone w treści metody.Jednakże można określić identyfikator jako identyfikator wiadomości do rozróżniania wielu wystąpień naruszenia wewnątrz metody.

Imports System

Namespace InSourceSuppression
    Public Class Class1

        <System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", _
        "CA1801:ReviewUnusedParameters", MessageId:="cmdArgs")> _
        Shared Sub Main(ByVal cmdArgs() As String)

        End Sub

        <System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", _
        "CA1806:DoNotIgnoreMethodResults", MessageId:="System.Guid")> _
        Shared Function IsValidGuid(ByVal g As String) As Boolean
            Try
                Dim instance As New Guid(g) 'Causes CA1806: DoNotIgnoreMethodResults
                Return True
            Catch e As ArgumentNullException
            Catch e As OverflowException
            Catch e As FormatException
            End Try

            Return False
        End Function
    End Class
End Namespace
using System;

namespace InSourceSuppression
{
    public class Class1
    {

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "args")]
        static void Main(string[] args) { }


        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage",
        "CA1806:DoNotIgnoreMethodResults", MessageId = "System.Guid")]
        public static bool IsValidGuid(string guid)
        {
            try
            {
              new Guid(guid); //Causes CA1806: DoNotIgnoreMethodResults
              return true;
            }
            catch (ArgumentNullException) {}
            catch (OverflowException) {}
            catch (FormatException) {}
            return false;
        }
   }
}
using namespace System;

CA_SUPPRESS_MESSAGE("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId="args")
int main(array<System::String ^> ^args)
{
    return 0;
}

namespace InSourceSuppression
{
public ref class Class1
{
public:
       CA_SUPPRESS_MESSAGE("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId="System.Uri")
       static bool IsValidGuid(String^ uri)
       {
              try
              {
                     gcnew Uri(uri);
                     return true;
              }
              catch (ArgumentNullException^) {}
              catch (OverflowException^) {}
              catch (FormatException^) {}
              return false;
       }
};
}

Kod wygenerowany

Kompilatory kodu zarządzanego i niektóre narzędzia innej firmy generuje kod, aby ułatwić rozwój szybkiego kodu.Generowanych przez kompilator kod, który pojawia się w plikach źródłowych zazwyczaj jest oznaczony atrybutem GeneratedCodeAttribute atrybut.

Można wybrać, czy należy wyłączyć analizy kodu ostrzeżeń i błędów dla wygenerowanego kodu.Aby informacji dotyczących sposobu pomijania takich ostrzeżeń i błędów, zobacz Jak: pomija ostrzeżenia analizy kodu wygenerowanego kodu.

Należy zauważyć, że ignoruje analizy kodu GeneratedCodeAttribute kiedy jest stosowana do całego zestawu lub jeden parametr.Takie sytuacje występują rzadko.

Suppressions na poziomie globalnym

Sprawdza, czy narzędzie do analizy kodu zarządzanego SuppressMessage atrybuty, które są stosowane na poziomie zestawu, moduł, typ, składnika lub parametr.Uruchamia się, to również przypadków naruszania w odniesieniu do zasobów i przestrzenie nazw.Te naruszenia muszą być stosowane na poziomie globalnym o zakresie i są kierowane.Na przykład następujący komunikat o błędzie powoduje pominięcie naruszenia obszaru nazw:

[module: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "MyNamespace")]

[!UWAGA]

Po włączeniu pomijania ostrzeżenia o zakresie obszaru nazw, znosi ostrzeżenie przed sam obszar nazw.Nie odrzuca ostrzeżenie przed typów w obszarze nazw.

Wszelkie tłumienia może być wyrażona przez określenie zakresu jawne.Te suppressions musi żyć na poziomie globalnym.Nie można określić poziom składnika tłumienia zdobienia typu.

Suppressions poziomu globalnego są jedynym sposobem na wyświetlanie komunikatów, które odwołują się do generowanych przez kompilator kodu, która nie mapuje się do źródła jawnie podany użytkownik.Na przykład poniższy kod powoduje pominięcie złamania zasad Konstruktor emitowane przez kompilator:

[module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]

[!UWAGA]

Docelowy zawsze zawiera nazwę pełną elementu.

Plik globalny tłumienia

Plik globalny tłumienia utrzymuje suppressions, które są suppressions na poziomie globalnym lub suppressions, które nie określają elementu docelowego.Na przykład suppressions za Zgromadzenia naruszenia poziomu są przechowywane w tym pliku.Dodatkowo niektóre suppressions ASP.NET są przechowywane w tym pliku, ponieważ ustawienia poziomu projektu nie są dostępne dla kod związany z formularzem.Tłumienie globalny jest tworzony i dodawany do projektu przy pierwszym wybraniu W pliku projektu w zwalczaniu możliwość Pomiń wiadomości polecenie w oknie Lista błędów.Aby uzyskać więcej informacji, zobacz Jak: pomija ostrzeżenia, przy użyciu elementu Menu.

Zobacz też

Informacje

System.Diagnostics.CodeAnalysis