Codeanalyse-Regelsatz für alle Microsoft-Regeln

Der Regelsatz "Alle Microsoft-Regeln" enthält alle Regeln zum Analysieren von verwaltetem Code.

Regel

Beschreibung

CA1000: Statische Member nicht in generischen Typen deklarieren

Wenn ein statischer Member eines generischen Typs aufgerufen wird, muss das Typargument für den Typ angegeben werden. Wenn ein generischer Instanzmember, der keine Unterstützung für Rückschlüsse bietet, aufgerufen wird, muss das Typargument für den Member angegeben werden. In diesen beiden Fällen ist die Syntax zum Angeben des Typarguments unterschiedlich und leicht zu verwechseln.

CA1001: Typen, die löschbare Felder besitzen, müssen gelöscht werden können

Eine Klasse deklariert und implementiert ein Instanzenfeld, das den System.IDisposable-Typ aufweist, IDisposable jedoch nicht implementiert. Eine Klasse, die ein IDisposable-Feld deklariert, besitzt indirekt eine nicht verwaltete Ressource und sollte die IDisposable-Schnittstelle implementieren.

CA1002: Generische Listen nicht verfügbar machen

System.Collections.Generic.List<(Of <(T>)>) ist eine generische Auflistung, die im Hinblick auf Leistung und nicht Vererbung entwickelt wurde. Daher enthält List keine virtuellen Member. Stattdessen sollten die generischen Auflistungen, die im Hinblick auf die Vererbung entworfen wurden, verfügbar gemacht werden.

CA1003: Generische Ereignishandlerinstanzen verwenden

Ein Typ enthält einen Delegaten, der void zurückgibt. Die zugehörige Signatur enthält zwei Parameter (der erste ist ein Objekt, der zweite ein Typ, der EventArgs zugewiesen werden kann), und .NET Framework 2.0 ist Ziel der enthaltenden Assembly.

CA1004: Generische Methoden müssen den Typparameter angeben

Mithilfe eines Rückschlusses wird das Typargument einer generischen Methode nach dem Typ des an die Methode übergebenen Arguments festgelegt, anstatt nach der expliziten Spezifikation des Typarguments. Um den Rückschluss zu aktivieren, muss die Parametersignatur einer generischen Methode einen Parameter einschließen, der vom selben Typ wie der Typparameter für die Methode ist. In diesem Fall muss das Typargument nicht angegeben werden. Wenn für alle Typparameter der Rückschluss verwendet wird, ist die Syntax zum Aufrufen von generischen und nicht generischen Instanzenmethoden identisch. Dies vereinfacht die Verwendung generischer Methoden.

CA1005: Übermäßige Anzahl von Parametern in generischen Typen vermeiden

Je mehr Typparameter ein generischer Typ enthält, desto schwieriger ist es, zu wissen und zu behalten, was die einzelnen Typparameter darstellen. In der Regel ist dies bei einem Typparameter offensichtlich, z. B. in List<T>, und in bestimmten Fällen auch bei zwei Typparametern, z. B. in Dictionary<TKey, TValue>. Mehr als zwei Typparameter hingegen bereiten den meisten Benutzern Schwierigkeiten.

CA1006: Generische Typen in Membersignaturen nicht schachteln

Ein geschachteltes Typargument ist ein Typargument, das auch ein generischer Typ ist. Um einen Member aufzurufen, dessen Signatur ein geschachteltes Typargument enthält, muss der Benutzer einen generischen Typ instanziieren und diesen an den Konstruktor eines zweiten generischen Typs übergeben. Die erforderliche Prozedur und die Syntax sind komplex, und diese Vorgehensweise sollte daher vermieden werden.

CA1007: Nach Möglichkeit Generika verwenden

Eine extern sichtbare Methode enthält einen Verweisparameter vom Typ System.Object. Bei Verwendung einer generischen Methode können alle Typen mit gewissen Einschränkungen an die Methode übergeben werden, ohne dass der Typ zuvor in den Typ des Verweisparameters umgewandelt werden muss.

CA1008: Enumerationen müssen einen Wert von 0 (null) aufweisen

Der Standardwert einer nicht initialisierten Enumeration ist ebenso wie der anderer Werttypen 0 (null). Eine Enumeration ohne das Flags-Attribut sollte einen Member mit dem Wert 0 (null) definieren, damit der Standardwert ein gültiger Wert der Enumeration ist. Wenn eine Enumeration, auf die FlagsAttribute angewendet wird, einen Member mit dem Wert 0 (null) definiert, sollte dieser den Namen "None" haben, um anzugeben, dass in der Enumeration keine Werte festgelegt wurden.

CA1009: Ereignishandler korrekt deklarieren

Ereignishandlermethoden nehmen zwei Parameter an. Der erste ist vom Typ System.Object und hat den Namen "sender". Dies ist das Objekt, durch das das Ereignis ausgelöst wurde. Der zweite Parameter ist vom Typ System.EventArgs und hat den Namen "e". Dies sind die dem Ereignis zugeordneten Daten. Ereignishandlermethoden geben normalerweise keinen Wert zurück. In der Programmiersprache C# wird dies mit dem void-Rückgabetyp angegeben.

CA1010: Auflistungen müssen eine generische Schnittstelle implementieren

Um die Verwendbarkeit einer Auflistung zu erweitern, implementieren Sie eine der generischen Auflistungsschnittstellen. Anschließend kann die Auflistung zum Auffüllen generischer Auflistungstypen verwendet werden.

CA1011: Basistypen als Parameter übergeben

Wenn in einer Methodendeklaration ein Basistyp als Parameter angegeben wird, kann jeder Typ, der von diesem Basistyp abgeleitet ist, als entsprechendes Argument an die Methode übergeben werden. Wenn die vom abgeleiteten Parametertyp bereitgestellte zusätzliche Funktionalität nicht erforderlich ist, lässt die Verwendung des Basistyps eine allgemeinere Nutzung der Methode zu.

CA1012: Abstrakte Typen dürfen keine Konstruktoren aufweisen

Konstruktoren von abstrakten Datentypen können nur von abgeleiteten Typen aufgerufen werden. Da öffentliche Konstruktoren Instanzen eines Typs erstellen und Sie keine Instanzen eines abstrakten Datentyps erstellen können, ist ein abstrakter Datentyp mit einem öffentlichen Konstruktor fehlerhaft konzipiert.

CA1013: Gleichheitsoperator beim Überladen von Addition und Subtraktion überladen

Ein öffentlicher oder geschützter Typ implementiert den Additions- oder Subtraktionsoperator, ohne den Gleichheitsoperator zu implementieren.

CA1014: Assemblys mit CLSCompliantAttribute markieren

In der Common Language Specification (CLS) sind Benennungseinschränkungen, Datentypen und Regeln definiert, denen Assemblys entsprechen müssen, wenn sie in verschiedenen Programmiersprachen verwendet werden sollen. Um guten Entwurfsprinzipien gerecht zu werden, muss bei allen Assemblys die CLS-Kompatibilität mit CLSCompliantAttribute explizit angegeben werden. Wenn das Attribut in einer Assembly nicht vorhanden ist, ist die Assembly nicht kompatibel.

CA1016: Assemblys mit AssemblyVersionAttribute markieren

.NET Framework verwendet die Versionsnummer für die eindeutige Identifizierung einer Assembly und zum Binden an Typen in Assemblys mit starkem Namen. Die Versionsnummer wird zusammen mit der Versions- und Herausgeberrichtlinie verwendet. Standardmäßig werden Anwendungen nur mit der Assemblyversion ausgeführt, mit der sie erstellt wurden.

CA1017: Assemblys mit ComVisibleAttribute markieren

Das ComVisibleAttribute-Attribut bestimmt, wie COM-Clients auf verwalteten Code zugreifen. Gute Entwurfsprinzipien verlangen, dass die COM-Sichtbarkeit durch Assemblys explizit angegeben wird. Die COM-Sichtbarkeit kann für die gesamte Assembly festgelegt und anschließend für einzelne Typen und Typmember überschrieben werden. Wenn das Attribut fehlt, ist der Inhalt der Assembly für COM-Clients sichtbar.

CA1018: Attribute mit AttributeUsageAttribute markieren

Wenn Sie ein benutzerdefiniertes Attribut definieren, markieren Sie es mithilfe von AttributeUsageAttribute, um anzugeben, an welcher Stelle im Quellcode das benutzerdefinierte Attribut angewendet werden kann. Die Bedeutung eines Attributs und dessen beabsichtigte Verwendung bestimmen die gültigen Positionen des Attributs im Code.

CA1019: Accessors für Attributargumente definieren

Attribute können obligatorische Argumente definieren, die angegeben werden müssen, wenn das Attribut auf ein Ziel angewendet wird. Diese Argumente werden auch als positionelle Argumente bezeichnet, da sie bei Attributkonstruktoren als positionelle Parameter angegeben werden. Für jedes obligatorische Argument muss das Attribut außerdem eine entsprechende schreibgeschützte Eigenschaft enthalten, damit der Wert des Arguments zur Ausführungszeit abgerufen werden kann. Attribute können auch optionale Argumente definieren, die auch als benannte Argumente bezeichnet werden. Diese Argumente werden bei Attributkonstruktoren über ihren Namen angegeben und sollten über eine entsprechende Lese-Schreib-Eigenschaft verfügen.

CA1020: Namespaces mit wenigen Typen vermeiden

Stellen Sie sicher, dass jeder der Namespaces logisch organisiert ist und dass es einen zulässigen Grund dafür gibt, Typen in einen wenig gefüllten Namespace einzufügen.

CA1021: out-Parameter vermeiden

Die Übergabe von Typen als Verweis (mit out oder ref) erfordert Erfahrung im Umgang mit Zeigern, Kenntnisse der Unterschiede zwischen Wert- und Verweistypen und Erfahrung im Umgang mit Methoden mit mehreren Rückgabewerten. Außerdem ist der Unterschied zwischen dem out-Parameter und dem ref-Parametern oft unklar.

CA1023: Indexer sollten nicht mehrdimensional sein

Indexer, d. h. indizierte Eigenschaften, sollten einen einzelnen Index verwenden. Mehrdimensionale Indexer können die Verwendbarkeit der Bibliothek deutlich reduzieren.

CA1024: Nach Möglichkeit Eigenschaften verwenden

Eine öffentliche oder geschützte Methode hat einen Namen, der mit "Get" beginnt, sie nimmt keine Parameter an und gibt einen Wert zurück, bei dem es sich nicht um ein Array handelt. Die Methode ist möglicherweise als Eigenschaft geeignet.

CA1025: Sich wiederholende Argumente durch ein Parameterarray ersetzen

Verwenden Sie ein Parameterarray statt sich wiederholender Argumente, wenn die genaue Anzahl der Argumente nicht bekannt ist und diese Argumente vom gleichen Typ sind oder als gleicher Typ übergeben werden können.

CA1026: Standardparameter sollten nicht verwendet werden

Methoden, die Standardparameter verwenden, sind nach der Common Language Specification (CLS) zulässig. Die CLS lässt jedoch zu, dass die Werte, die diesen Parametern zugewiesen sind, von Compilern ignoriert werden. Damit das gewünschte Verhalten in verschiedenen Programmiersprachen erhalten bleibt, müssen Methoden, die Standardparameter verwenden, durch Methodenüberladungen ersetzt werden, von denen die Standardparameter bereitgestellt werden.

CA1027: Enumerationen mit FlagsAttribute markieren

Eine Enumeration ist ein Werttyp, der einen Satz verwandter benannter Konstanten definiert. Wenden Sie FlagsAttribute auf eine Enumeration an, wenn deren benannte Konstanten sinnvoll kombiniert werden können.

CA1028: Der Enumerationsspeicher sollte Int32 sein.

Eine Enumeration ist ein Werttyp, der einen Satz verwandter benannter Konstanten definiert. Standardmäßig wird zum Speichern des konstanten Werts der System.Int32-Datentyp verwendet. Sie können diesen zugrunde liegenden Typ zwar ändern, in den meisten Szenarien ist dies jedoch weder notwendig noch empfehlenswert.

CA1030: Nach Möglichkeit Ereignisse verwenden

Diese Regel erkennt Methoden, deren Namen normalerweise für Ereignisse verwendet würden. Wenn eine Methode auf eine klar definierte Zustandsänderung hin aufgerufen wird, sollte die Methode von einem Ereignishandler aufgerufen werden. Objekte, die die Methode aufrufen, sollten Ereignisse auslösen, statt die Methode direkt aufzurufen.

CA1031: Allgemeine Ausnahmetypen nicht auffangen

Allgemeine Ausnahmen sollten nicht abgefangen werden. Fangen Sie eine spezifischere Ausnahme ab, oder lösen Sie die allgemeine Ausnahme in der letzten Anweisung des catch-Blocks erneut aus.

CA1032: Standardausnahmekonstruktoren implementieren

Falls nicht der vollständige Satz von Konstruktoren angegeben wird, wird eine ordnungsgemäße Behandlung von Ausnahmen unter Umständen erschwert.

CA1033: Schnittstellenmethoden sollten von untergeordneten Typen aufgerufen werden können

Ein unversiegelter, extern sichtbarer Typ gibt eine explizite Methodenimplementierung einer öffentlichen Schnittstelle an und gibt keine alternative extern sichtbare Methode mit dem gleichen Namen an.

CA1034: Geschachtelte Typen sollten nicht sichtbar sein

Ein geschachtelter Typ ist ein Typ, der innerhalb des Gültigkeitsbereichs eines anderen Typs deklariert ist. Geschachtelte Typen eignen sich für die Kapselung privater Implementierungsdetails der enthaltenden Typen. Bei dieser Verwendungsart sollten geschachtelte Typen nicht extern sichtbar sein.

CA1035: ICollection-Implementierungen weisen Member mit starker Typisierung auf

Nach dieser Regel müssen ICollection-Implementierungen stark typisierte Member angeben, damit die Benutzer keine Argumente in den Object-Typ umwandeln müssen, wenn sie die durch die Schnittstelle zur Verfügung gestellten Funktionen verwenden. Diese Regel geht davon aus, dass der Typ, der ICollection implementiert, diese Implementierung zur Verwaltung einer Auflistung von Instanzen eines Typs vornimmt, der stärker ist als Object.

CA1036: Methoden bei vergleichbaren Typen überschreiben

Ein öffentlicher oder geschützter Typ implementiert die System.IComparable-Schnittstelle. Er überschreibt Object.Equals nicht und überlädt auch nicht den sprachspezifischen Operator für gleich, ungleich, kleiner als und größer als.

CA1038: Enumeratoren sollten eine starke Typisierung aufweisen

Nach dieser Regel müssen IEnumerator-Implementierungen für die Current-Eigenschaft auch eine Version mit starker Typisierung angeben, damit die Benutzer den Rückgabewert nicht in den starken Typ umwandeln müssen, wenn sie die durch die Schnittstelle zur Verfügung gestellten Funktionen verwenden.

CA1039: Listen weisen eine starke Typisierung auf

Nach dieser Regel müssen IList-Implementierungen stark typisierte Member angeben, damit die Benutzer keine Argumente in den System.Object-Typ umwandeln müssen, wenn sie die durch die Schnittstelle zur Verfügung gestellten Funktionen verwenden.

CA1040: Leere Schnittstellen vermeiden

Schnittstellen definieren Member, die ein Verhalten oder einen Verwendungsvertrag bereitstellen. Die durch die Schnittstelle beschriebene Funktionalität kann von jedem Typ übernommen werden, unabhängig davon, an welcher Stelle der Typ in der Vererbungshierarchie steht. Ein Typ implementiert eine Schnittstelle, indem er Implementierungen für die Member der Schnittstelle bereitstellt. Eine leere Schnittstelle definiert keine Member. Daher definiert sie keinen Vertrag, der implementiert werden kann.

CA1041: ObsoleteAttribute-Meldung bereitstellen

Ein Typ oder Member ist mit einem System.ObsoleteAttribute-Attribut markiert, dessen ObsoleteAttribute.Message-Eigenschaft nicht angegeben wurde. Wenn ein mit ObsoleteAttribute markierter Typ oder Member kompiliert wird, wird die Message-Eigenschaft des Attributs angezeigt, die den Benutzer über den veralteten Typ oder Member informiert.

CA1043: Ganzzahliges Argument oder Zeichenfolgenargument für Indexer verwenden

Indexer (d. h. indizierte Eigenschaften) sollten ganzzahlige Typen oder Zeichenfolgentypen für den Index verwenden. Diese Typen werden i. d. R. zum Indizieren von Datenstrukturen verwendet und erweitern den Einsatzbereich der Bibliothek. Die Verwendung des Object-Typs sollte auf die Fälle beschränkt werden, in denen der spezielle integrale oder Zeichenfolgentyp zur Entwurfszeit nicht angegeben werden kann.

CA1044: Eigenschaften sollten nicht lesegeschützt sein

Während schreibgeschützte Eigenschaften zulässig und häufig notwendig sind, verbieten die Entwurfsrichtlinien die Verwendung lesegeschützter Eigenschaften, denn die Sicherheit wird nicht dadurch gefördert, dass einem Benutzer zunächst gestattet wird, einen Wert festzulegen, und er anschließend daran gehindert wird, den Wert anzuzeigen. Außerdem kann der Zustand freigegebener Objekte ohne Lesezugriff nicht angezeigt werden, wodurch ihre Nützlichkeit eingeschränkt wird.

CA1045: Typen nicht als Verweis übergeben

Die Übergabe von Typen als Verweis (mit out oder ref) erfordert Erfahrung im Umgang mit Zeigern, Kenntnisse der Unterschiede zwischen Wert- und Verweistypen und Erfahrung im Umgang mit Methoden mit mehreren Rückgabewerten. Entwickler von Bibliotheken für eine breite Zielgruppe sollten nicht davon ausgehen, dass die Benutzer den out-Parameter oder den ref-Parameter richtig verwenden können.

CA1046: Gleichheitsoperator für Referenztypen nicht überladen

Für Verweistypen ist die Standardimplementierung des Gleichheitsoperators fast immer zutreffend. Standardmäßig sind zwei Verweise nur dann gleich, wenn sie auf dasselbe Objekt zeigen.

CA1047: Geschützte Member in versiegelten Typen nicht deklarieren

Typen deklarieren geschützte Member, damit erbende Typen auf den Member zugreifen oder diesen überschreiben können. Per Definition kann von versiegelten Typen nicht geerbt werden. Dies bedeutet, dass geschützte Methoden für versiegelte Typen nicht aufgerufen werden können.

CA1048: Virtuelle Member in versiegelten Typen nicht deklarieren

Typen deklarieren Methoden als virtuell, damit erbende Typen die Implementierung der virtuellen Methode überschreiben können. Per Definition kann ein versiegelter Typ nicht geerbt werden. Dadurch wird eine virtuelle Methode für einen versiegelten Typ bedeutungslos.

CA1049: Typen, die systemeigene Ressourcen besitzen, müssen gelöscht werden können

Typen, die nicht verwaltete Ressourcen zuordnen, müssen IDisposable implementieren, damit Aufrufer diese Ressourcen bei Bedarf freigeben und die Lebensdauer der Objekte verkürzen können, die diese Ressourcen verwenden.

CA1050: Typen in Namespaces deklarieren

Typen werden innerhalb von Namespaces deklariert, um Namenskonflikte zu verhindern und um verwandte Typen in einer Objekthierarchie zu organisieren.

CA1051: Sichtbare Instanzfelder nicht deklarieren

Ein Feld sollte primär als Implementierungsdetail verwendet werden. Felder sollten privat oder intern sein und durch Verwendung von Eigenschaften verfügbar gemacht werden.

CA1052: Statische Haltertypen sollten versiegelt sein

Ein öffentlicher oder geschützter Typ enthält nur statische Member und ist nicht mit dem sealed (C#-Referenz)-Modifzierer (NonInheritable) deklariert. Ein Typ, der nicht geerbt werden soll, sollte mit dem sealed-Modifizierer markiert werden, um seine Verwendung als Basistyp zu verhindern.

CA1053: Statische Haltertypen sollten keine Konstruktoren aufweisen

Ein öffentlicher oder verschachtelter öffentlicher Typ deklariert nur statische Member und verfügt über einen öffentlichen oder geschützten Standardkonstruktor. Der Konstruktor ist überflüssig, da zum Aufrufen statischer Member keine Instanz des Typs erforderlich ist. Die Zeichenfolgenüberladung sollte die URI-Überladung aus Sicherheitsgründen mit dem Zeichenfolgenargument aufrufen.

CA1054: URI-Parameter dürfen keine Zeichenfolgen sein

Wenn eine Methode eine Zeichenfolgendarstellung eines URIs annimmt, sollte eine entsprechende Überladung angegeben werden, die eine Instanz der URI-Klasse annimmt, die diese Dienste auf sichere Weise bereitstellt.

CA1055: URI-Rückgabewerte dürfen keine Zeichenfolgen sein.

Diese Regel geht davon aus, dass die Methode einen URI (Uniform Resource Identifier) zurückgibt. Eine Zeichenfolgendarstellung eines URIs ist anfällig für Analyse- und Codierungsfehler und kann zu Sicherheitsmängeln führen. Die System.Uri-Klasse stellt diese Dienste auf sichere Weise bereit.

CA1056: URI-Eigenschaften dürfen keine Zeichenfolgen sein

Diese Regel geht davon aus, dass die Eigenschaft einen URI (Uniform Resource Identifier) darstellt. Eine Zeichenfolgendarstellung eines URIs ist anfällig für Analyse- und Codierungsfehler und kann zu Sicherheitsmängeln führen. Die System.Uri-Klasse stellt diese Dienste auf sichere Weise bereit.

CA1057: URI-Überladungen vom Typ string rufen Überladungen vom Typ System.Uri auf

Ein Typ deklariert Methodenüberladungen, die sich nur durch die Ersetzung eines Zeichenfolgenparameters mit einem System.Uri-Parameter unterscheiden. Die Überladung, die den Zeichenfolgenparameter akzeptiert, ruft nicht die Überladung auf, die den URI-Parameter akzeptiert.

CA1058: Typen sollten bestimmte Basistypen nicht erweitern

Ein extern sichtbarer Typ erweitert bestimmte Basistypen. Verwenden Sie eine der Alternativen.

CA1059: Member sollten bestimmte konkrete Typen nicht verfügbar machen

Ein konkreter Typ ist ein Typ, der eine vollständige Implementierung aufweist und deshalb instanziiert werden kann. Damit der Member universell verwendet werden kann, ersetzen Sie den konkreten Typ durch die vorgeschlagene Schnittstelle.

CA1060: P/Invokes in NativeMethods-Klasse verschieben

Plattformaufrufmethoden, beispielsweise Methoden, die mit dem System.Runtime.InteropServices.DllImportAttribute-Attribut gekennzeichnet sind, oder Methoden, die in Visual Basic mithilfe des Declare-Schlüsselworts definiert wurden, greifen auf nicht verwalteten Code zu. Diese Methoden sollten der Klasse NativeMethods, SafeNativeMethods oder UnsafeNativeMethods angehören.

CA1061: Basisklassenmethoden nicht ausblenden

Eine Methode in einem Basistyp wird durch eine Methode mit identischem Namen in einem abgeleiteten Typ verdeckt, wenn die Parametersignatur der abgeleiteten Methode sich nur hinsichtlich der Typen unterscheidet, die schwächer abgeleitet sind als die entsprechenden Typen in der Parametersignatur der Basismethode.

CA1062: Argumente von öffentlichen Methoden validieren

Alle an extern sichtbare Methoden übergebenen Verweisargumente sollten auf NULL überprüft werden.

CA1063: IDisposable korrekt implementieren

Alle IDisposable-Typen müssen das Dispose-Muster korrekt implementieren.

CA1064: Ausnahmen sollten öffentlich sein

Eine interne Ausnahme ist nur innerhalb ihres eigenen internen Bereichs sichtbar. Nachdem die Ausnahme den internen Bereich verlassen hat, kann nur die Basisausnahme zum Abfangen der Ausnahme verwendet werden. Wenn die interne Ausnahme von T:System.Exception, T:System.SystemException oder T:System.ApplicationException geerbt wurde, verfügt der externe Code nicht über genügend Informationen zur Behandlung der Ausnahme.

CA1065: Keine Ausnahmen an unerwarteten Speicherorten auslösen

Eine Methode, von der das Auslösen von Ausnahmen nicht erwartet wird, löst eine Ausnahme aus.

CA1300: MessageBoxOptions angeben

Wenn in Kulturen, in denen von rechts nach links gelesen wird, ein Meldungsfeld richtig angezeigt werden soll, müssen der RightAlign-Member und der RtlReading-Member der MessageBoxOptions-Enumeration an die Show-Methode übergeben werden.

CA1301: Doppelte Zugriffstasten vermeiden

Eine Zugriffstaste ermöglicht den Zugriff auf ein Steuerelement unter Verwendung der ALT-TASTE. Wenn mehrere Steuerelemente über doppelte Zugriffstasten verfügen, ist das Verhalten der Zugriffstaste nicht stringent.

CA1302: Keine Hartkodierung für gebietsschemaspezifische Zeichenfolgen verwenden

Die System.Environment.SpecialFolder-Enumeration enthält Member, die auf besondere Systemordner verweisen. Die Speicherorte dieser Ordner können sich von Betriebssystem zu Betriebssystem unterscheiden. Der Benutzer kann einige Speicherorte ändern, und die Speicherorte sind lokalisiert. Die Environment.GetFolderPath-Methode gibt die der Environment.SpecialFolder-Enumeration zugeordneten Speicherorte zurück, die lokalisiert und für den derzeit ausgeführten Computer geeignet sind.

CA1303: Literale nicht als lokalisierte Parameter übergeben

Eine extern sichtbare Methode übergibt ein Zeichenfolgenliteral als Parameter an einen Konstruktor oder eine Methode in der .NET Framework-Klassenbibliothek, und diese Zeichenfolge sollte lokalisierbar sein.

CA1304: CultureInfo angeben

Eine Methode oder ein Konstruktor ruft einen Member mit einer Überladung auf, die einen System.Globalization.CultureInfo-Parameter akzeptiert. Die Methode oder der Konstruktor ruft nicht die Überladung auf, die den CultureInfo-Parameter akzeptiert. Wenn ein CultureInfo-Objekt oder ein System.IFormatProvider-Objekt nicht angegeben wird, besitzt der vom überladenen Member bereitgestellte Standardwert möglicherweise nicht in allen Gebietsschemas den gewünschten Effekt.

CA1305: IFormatProvider angeben

Eine Methode oder ein Konstruktor ruft einen oder mehrere Member auf, die Überladungen besitzen und einen System.IFormatProvider-Parameter akzeptieren; die Methode oder der Konstruktor ruft die Überladung nicht auf, die den IFormatProvider-Parameter akzeptiert. Wenn ein System.Globalization.CultureInfo-Objekt oder ein IFormatProvider-Objekt nicht angegeben wird, besitzt der vom überladenen Member bereitgestellte Standardwert möglicherweise nicht in allen Gebietsschemas den gewünschten Effekt.

CA1306: Gebietsschema für Datentypen festlegen

Das Gebietsschema bestimmt kulturspezifische Darstellungselemente für Daten wie die für Zahlenwerte, Währungssymbole und Sortierreihenfolge verwendete Formatierung. Wenn Sie eine DataTable oder ein DataSet erstellen, sollten Sie das Gebietsschema explizit festlegen.

CA1307: StringComparison angeben

Ein Zeichenfolgenvergleich verwendet eine Methodenüberladung, durch die kein StringComparison-Parameter festgelegt wird.

CA1308: Zeichenfolgen in Großbuchstaben normalisieren

Zeichenfolgen sollten in Großschreibung normalisiert werden. Bei einer kleinen Gruppe von Zeichen wird bei der Konvertierung in Kleinbuchstaben kein Roundtrip ausgeführt.

CA1309: Ordinal-StringComparison verwenden

Durch einen nicht linguistischen Zeichenfolgenvergleich wird der StringComparison-Parameter nicht auf Ordinal und nicht auf OrdinalIgnoreCase festgelegt. Wenn der Parameter explizit auf StringComparison.Ordinal oder StringComparison.OrdinalIgnoreCase festgelegt wird, werden die Codeausführung beschleunigt sowie Richtigkeit und Zuverlässigkeit gesteigert.

CA1400: Für P/Invoke müssen Einstiegspunkte vorhanden sein

Eine öffentliche oder geschützte Methode ist mit dem System.Runtime.InteropServices.DllImportAttribute-Attribut markiert. Entweder konnte die nicht verwaltete Bibliothek nicht gefunden werden, oder die Methode konnte keiner Funktion in der Bibliothek zugeordnet werden.

CA1401: P/Invokes dürfen nicht sichtbar sein

Eine öffentliche oder geschützte Methode in einem öffentlichen Typ enthält das System.Runtime.InteropServices.DllImportAttribute-Attribut (in Visual Basic auch durch das Declare-Schlüsselwort implementiert). Solche Methoden sollten nicht verfügbar gemacht werden.

CA1402: Überladungen in für COM sichtbaren Schnittstellen vermeiden

Wenn für COM-Clients überladene Methoden verfügbar gemacht werden, behält nur die erste Methodenüberladung ihren Namen. Nachfolgende Überladungen werden eindeutig umbenannt, indem dem Namen ein Unterstrich (_) und eine ganze Zahl angefügt werden, die der Reihenfolge der Deklaration der Überladung entspricht.

CA1403: Typen mit automatischem Layout sollten nicht für COM sichtbar sein

Ein für COM sichtbarer Werttyp wird mit dem auf LayoutKind.Auto festgelegten System.Runtime.InteropServices.StructLayoutAttribute-Attribut markiert. Das Layout dieser Typen kann zwischen den verschiedenen .NET Framework-Versionen voneinander abweichen, wodurch die Verbindung zu COM-Clients unterbrochen wird, die ein bestimmtes Layout erwarten.

CA1404: GetLastError unmittelbar nach P/Invoke aufrufen

Die Marshal.GetLastWin32Error-Methode oder die entsprechende GetLastError-Win32-Funktion wird aufgerufen, und unmittelbar zuvor wird keine Plattformaufrufmethode aufgerufen.

CA1405: Für COM sichtbare Basistypen sollten für COM sichtbar sein

Ein für COM sichtbarer Typ wird von einem Typ abgeleitet, der nicht für COM sichtbar ist.

CA1406: Int64-Argumente für Visual Basic 6-Clients vermeiden

Visual Basic 6-COM-Clients können nicht auf 64-Bit-Ganzzahlen zugreifen.

CA1407: Statische Member in für COM sichtbaren Typen vermeiden

COM unterstützt keine statischen Methoden.

CA1408: AutoDual ClassInterfaceType nicht verwenden

Typen, die eine duale Schnittstelle verwenden, ermöglichen Clients die Bindung an ein bestimmtes Schnittstellenlayout. Änderungen an einer zukünftigen Version des Layouts des Typs oder eines Basistyps führen zur Aufhebung der Verbindung zu COM-Clients, die eine Bindung zu der Schnittstelle haben. Standardmäßig wird eine auf Dispatch beschränkte Schnittstelle verwendet, wenn das ClassInterfaceAttribute-Attribut nicht angegeben wird.

CA1409: Für COM sichtbare Typen müssen erstellt werden können

Ein Verweistyp, der speziell als für COM sichtbar gekennzeichnet ist, enthält einen öffentlichen parametrisierten Konstruktor, jedoch keinen öffentlichen (parameterlosen) Standardkonstruktor. Ein Typ ohne einen öffentlichen Standardkonstruktor kann nicht von COM-Clients erstellt werden.

CA1410: Die COM-Registrierungsmethoden müssen übereinstimmen

Ein Typ deklariert eine mit dem System.Runtime.InteropServices.ComRegisterFunctionAttribute-Attribut markierte Methode, aber keine mit dem System.Runtime.InteropServices.ComUnregisterFunctionAttribute-Attribut markierte Methode oder umgekehrt.

CA1411: Die COM-Registrierungsmethoden dürfen nicht sichtbar sein

Eine mit dem System.Runtime.InteropServices.ComRegisterFunctionAttribute-Attribut oder dem System.Runtime.InteropServices.ComUnregisterFunctionAttribute-Attribut markierte Methode ist extern sichtbar.

CA1412: ComSource-Schnittstellen als IDispatch markieren

Ein Typ ist mit dem System.Runtime.InteropServices.ComSourceInterfacesAttribute-Attribut markiert, und mindestens eine der angegebenen Schnittstellen ist nicht mit dem auf ComInterfaceType.InterfaceIsIDispatch festgelegten System.Runtime.InteropServices.InterfaceTypeAttribute-Attribut markiert.

CA1413: Nicht öffentliche Felder in für COM sichtbaren Werttypen vermeiden

Nicht öffentliche Instanzenfelder von COM-sichtbaren Werttypen sind für COM-Clients sichtbar. Überprüfen Sie den Inhalt der Felder auf Informationen, die nicht verfügbar gemacht werden sollen oder unbeabsichtigte Auswirkungen auf Design oder Sicherheit haben.

CA1414: Boolesche P/Invoke-Argumente mit MarshalAs markieren

Der boolesche Datentyp verfügt über mehrere Darstellungen in nicht verwaltetem Code.

CA1415: P/Invokes korrekt deklarieren

Diese Regel sucht nach Deklarationen für eine Plattformaufrufmethode, die Win32-Funktionen mit einem Zeiger auf einen OVERLAPPED-Strukturparameter zum Ziel haben, der zugehörige verwaltete Parameter ist jedoch kein Zeiger auf eine System.Threading.NativeOverlapped-Struktur.

CA1500: Variablennamen sollten nicht mit Feldnamen übereinstimmen

Mit einer Instanzenmethode wird ein Parameter oder eine lokale Variable deklariert, dessen bzw. deren Name mit dem Namen eines Instanzenfelds des deklarierenden Typs übereinstimmt. Dies führt zu Fehlern.

CA1501: Übermäßige Vererbung vermeiden

Ein Typ ist in seiner Vererbungshierarchie mehr als vier Ebenen tief. Tief verschachtelte Typenhierarchien können schwer zu verfolgen, verstehen und verwalten sein.

CA1502: Übermäßige Komplexität vermeiden

Diese Regel ermöglicht Aussagen über die Anzahl linear unabhängiger Pfade in einer Methode, wobei die Anzahl der Pfade durch die Anzahl und Komplexität bedingter Verzweigungen bestimmt wird.

CA1504: Irreführende Feldnamen überprüfen

Der Name eines Instanzenfelds beginnt mit "s_", oder der Name eines static-Felds (Shared-Feld in Visual Basic) beginnt mit "m_".

CA1505: Nicht wartbaren Code vermeiden

Ein Typ oder eine Methode verfügt über einen niedrigen Wartbarkeitsindexwert. Ein niedriger Wartbarkeitsindex zeigt an, dass ein Typ oder eine Methode wahrscheinlich schwer zu verwalten ist und geeignet für einen Neuentwurf wäre.

CA1506: Übermäßige Klassenkopplungen vermeiden

Durch diese Regel wird die Klassenkopplung gemessen, indem die eindeutigen Typverweise, die ein Typ oder eine Methode enthält, gezählt werden.

CA1600: Verwenden Sie keine Prozesse mit der Priorität "idle"

Legen Sie für Prozesse nicht die Priorität Idle fest. Prozesse mit System.Diagnostics.ProcessPriorityClass.Idle beanspruchen die CPU, wenn diese sich eigentlich im Leerlauf befindet, und blockieren daher den Standbymodus.

CA1601: Verwenden Sie keine Timer, um Änderungen am Betriebszustand zu verhindern

Regelmäßige Aktivitäten mit einer höheren Frequenz belasten die CPU und beeinflussen energiesparende Leerlaufzeitgeber, mit denen die Anzeige sowie die Festplatten ausgeschaltet werden.

CA1700: Enumerationswerte nicht mit "Reserviert" benennen

Diese Regel setzt voraus, dass ein Enumerationsmember mit einem Namen, der "reserved" enthält, derzeit nicht verwendet wird, sondern ein Platzhalter ist, der in einer künftigen Version umbenannt oder entfernt werden soll. Das Umbenennen oder Entfernen eines Members ist eine unterbrechende Änderung.

CA1701: Bei zusammengesetzten Begriffen in Ressourcenzeichenfolgen sollte die Groß-/Kleinschreibung beachtet werden

Jeder Begriff in der Ressourcenzeichenfolge wird basierend auf der Groß-/Kleinschreibung in einzelne Token unterteilt. Jede zusammenhängende Kombination aus zwei Token wird durch die Rechtschreibprüfung aus der Microsoft-Bibliothek überprüft. Wenn der Begriff erkannt wird, erzeugt er einen Regelverstoß.

CA1702: Bei zusammengesetzten Begriffen sollte die Groß-/Kleinschreibung beachtet werden

Der Name eines Bezeichners enthält mehrere Begriffe, und mindestens einer der Begriffe ist anscheinend ein zusammengesetztes Wort mit falscher Groß-/Kleinschreibung.

CA1703: Ressourcenzeichenfolgen sollten korrekt geschrieben werden

Eine Ressourcenzeichenfolge enthält mindestens ein Wort, das von der Rechtschreibprüfung aus der Microsoft-Bibliothek nicht erkannt wird.

CA1704: Bezeichner sollten korrekt geschrieben werden

Der Name eines extern sichtbaren Bezeichners enthält mindestens ein Wort, das von der Rechtschreibprüfung aus der Microsoft-Bibliothek nicht erkannt wird.

CA1707: Bezeichner sollten keine Unterstriche enthalten

Bezeichnernamen dürfen keinen Unterstrich (_) enthalten. Namespaces, Typen, Member und Parameter werden von dieser Regel überprüft.

CA1708: Bezeichner sollten sich nicht nur durch die Groß-/Kleinschreibung unterscheiden

Bezeichner für Namespaces, Typen, Member und Parameter dürfen sich nicht nur durch die Groß-/Kleinschreibung unterscheiden, weil Sprachen, die auf die Common Language Runtime abzielen, nicht zwischen Groß- und Kleinschreibung unterscheiden müssen.

CA1709: Bei Bezeichnern sollte die Groß-/Kleinschreibung beachtet werden

Gemäß der Konvention werden Parameternamen in Kamel-Schreibweise verfasst. Für Namespace-, Typ- und Membernamen wird hingegen die Pascal-Schreibweise verwendet.

CA1710: Bezeichner sollten ein richtiges Suffix aufweisen

Die Namen von Typen, die bestimmte Basistypen erweitern oder bestimmte Schnittstellen implementieren, bzw. von diesen Typen abgeleitete Typen weisen stets ein Suffix auf, das mit dem Basistyp oder der Schnittstelle verknüpft ist.

CA1711: Bezeichner sollten kein falsches Suffix aufweisen

Nur die Namen von Typen, die bestimmte Basistypen erweitern oder bestimmte Schnittstellen bzw. Typen implementieren, die von diesen Typen abgeleitet werden, sollten stets mit bestimmten reservierten Suffixen enden. Für andere Typnamen sollten diese reservierten Suffixe nicht verwendet werden.

CA1712: Keine Typnamen als Präfixe für Enumerationswerte verwenden

Den Namen von Enumationsmembern wird der Typname nicht als Präfix vorangestellt, weil die Typinformationen von den Entwicklungswerkzeugen bereitgestellt werden sollen.

CA1713: Ereignisse sollten kein Before- oder After-Präfix aufweisen

Der Name eines Ereignisses beginnt mit "Before" oder "After". Um verwandte Ereignisse zu benennen, die in einer bestimmten Reihenfolge ausgelöst werden, verwenden Sie die Gegenwarts- oder Vergangenheitsform, um ihre relative Position in der Aktionsfolge anzugeben.

CA1714: Flags-Enumerationen sollten Pluralnamen aufweisen

Eine öffentliche Enumeration verfügt über das System.FlagsAttribute-Attribut, und der Name endet nicht in der Pluralform ("s"). Die Namen von mit FlagsAttribute markierten Typen stehen im Plural, da das Attribut angibt, dass mehr als ein Wert festgelegt werden kann.

CA1715: Bezeichner sollten ein korrektes Präfix aufweisen

Der Name einer extern sichtbaren Schnittstelle beginnt nicht mit dem Großbuchstaben "I". Der Name eines generischen Typparameters für einen extern sichtbaren Typ oder eine extern sichtbare Methode beginnt nicht mit dem Großbuchstaben "T".

CA1716: Bezeichner sollten nicht mit Schlüsselwörtern übereinstimmen

Ein Namespacename oder ein Typname stimmt mit einem reservierten Schlüsselwort in einer Programmiersprache überein. Bezeichner für Namespaces und Typen sollten nicht mit Schlüsselwörtern übereinstimmen, die in Programmiersprachen definiert sind, die auf die Common Language Runtime abzielen.

CA1717: Nur FlagsAttribute-Enumerationen sollten Pluralnamen aufweisen

Gemäß den Benennungskonventionen gibt ein Pluralname für eine Enumeration an, dass für die Enumeration mehrere Werte gleichzeitig angegeben werden können.

CA1719: Parameternamen sollten nicht mit Membernamen übereinstimmen

Ein Parametername sollte die Bedeutung eines Parameters vermitteln, und ein Membername sollte die Bedeutung eines Members vermitteln. Diese stimmen in der Regel nicht überein. Wenn ein Parameter mit dem Namen des zugehörigen Members benannt wird, ist dies nicht intuitiv, und es erschwert die Verwendung der Bibliothek.

CA1720: Bezeichner dürfen keine Typnamen enthalten

Der Name eines Parameters in einem extern sichtbaren Member enthält einen Datentypnamen, oder der Name eines extern sichtbaren Members enthält einen sprachspezifischen Datentypnamen.

CA1721: Eigenschaftennamen sollten nicht mit Get-Methoden übereinstimmen

Der Name eines öffentlichen oder geschützten Members beginnt mit "Get" und stimmt in anderer Hinsicht mit dem Namen einer öffentlichen oder geschützten Eigenschaft überein. " Get"-Methoden und -Eigenschaften sollten über Namen verfügen, aus denen ihre Funktion eindeutig hervorgeht.

CA1722: Bezeichner sollten kein falsches Präfix aufweisen

Gemäß der Konvention verfügen nur bestimmte Programmierelemente über Namen, die mit einem bestimmten Präfix anfangen.

CA1724: Typnamen sollten nicht mit Namespaces übereinstimmen

Typnamen sollten nicht mit den Namen von Namespaces übereinstimmen, die in der .NET Framework-Klassenbibliothek definiert sind. Durch einen Verstoß gegen diese Regel kann die Verwendbarkeit der Bibliothek eingeschränkt werden.

CA1725: Parameternamen sollten mit der Basisdeklaration übereinstimmen

Die konsistente Benennung von Parametern in einer Überschreibungshierarchie erhöht die Verwendbarkeit von Methodenüberschreibungen. Ein Parametername in einer abgeleiteten Methode, der vom Namen in der Basisdeklaration abweicht, kann zu Unklarheiten dahingehend führen, ob es sich bei der Methode um eine Überschreibung der Basismethode oder eine neue Überladung der Methode handelt.

CA1726: Bevorzugte Begriffe verwenden

Der Name eines extern sichtbaren Bezeichners schließt einen Begriff ein, für den ein alternativer, bevorzugter Begriff vorhanden ist. Der Name kann auch den Begriff "Flag" oder "Flags" enthalten.

CA1800: Keine unnötigen Umwandlungen

Doppelte Umwandlungen beeinträchtigen die Leistung, insbesondere wenn die Umwandlungen in kompakten Iterationsanweisungen ausgeführt werden.

CA1801: Nicht verwendete Parameter überprüfen

Eine Methodensignatur enthält einen Parameter, der nicht im Methodentext verwendet wird.

CA1802: Nach Möglichkeit Literale verwenden

Ein Feld wird als static und read-only deklariert (Shared und ReadOnly in Visual Basic) und mit einem Wert initialisiert, der zur Kompilierungszeit berechnet werden kann. Da der dem verwendeten Feld zugewiesene Wert zur Kompilierungszeit berechnet werden kann, ändern Sie die Deklaration in ein const-Feld (Const in Visual Basic), sodass der Wert statt zur Laufzeit zur Kompilierungszeit berechnet wird.

CA1804: Nicht verwendete lokale Variablen entfernen

Nicht verwendete lokale Variablen und unnötige Zuweisungen vergrößern die Assembly unnötig und beeinträchtigen die Leistung.

CA1805: Keine unnötige Initialisierung

Ein statischer Konstruktor oder ein Instanzenkonstruktor initialisiert ein Feld mit dessen Standardwert. Die Common Language Runtime initialisiert alle Felder mit ihren Standardwerten, bevor der Konstruktor ausgeführt wird.

CA1806: Methodenergebnisse nicht ignorieren

Ein neues Objekt wird erstellt, aber nie verwendet, oder eine Methode wird aufgerufen, die eine neue Zeichenfolge erstellt und zurückgibt, die nie verwendet wird, oder eine COM-Methode oder P/Invoke-Methode gibt ein HRESULT oder einen Fehlercode zurück, das oder der nie verwendet wird.

CA1809: Übermäßige lokale Variablen vermeiden

Zur Leistungsoptimierung wird ein Wert häufig in einem Prozessorregister statt im Speicher gespeichert. Dieser Vorgang wird als Registrierung des Werts bezeichnet. Um die Wahrscheinlichkeit zu erhöhen, dass alle lokalen Variablen registriert werden, müssen Sie die Anzahl der lokalen Variablen auf 64 beschränken.

CA1810: Statische Felder von Verweistypen inline initialisieren

Wenn ein Typ einen expliziten statischen Konstruktor deklariert, überprüft der JIT-Compiler (Just in Time) jede statische Methode und jeden Instanzenkonstruktor des Typs. Dadurch wird sichergestellt, dass der statische Konstruktor zuvor aufgerufen wurde. Durch die Überprüfung statischer Konstruktoren kann die Leistung herabgesetzt werden.

CA1811: Nicht aufgerufenen privaten Code vermeiden

Zu einem privaten oder internen Member (auf Assemblyebene) gibt es in der Assembly keine Aufrufer, er wird nicht durch die Common Language Runtime und nicht durch einen Delegaten aufgerufen.

CA1812: Nicht instanziierte interne Klassen vermeiden

Eine Instanz eines Typs auf Assemblyebene wird nicht durch Code in der Assembly erstellt.

CA1813: Nicht versiegelte Attribute vermeiden

Die .NET Framework-Klassenbibliothek stellt Methoden zum Abrufen benutzerdefinierter Attribute bereit. Standardmäßig wird mit diesen Methoden die Attributvererbungshierarchie durchsucht. Durch Verwendung eines versiegelten Attributs wird das Durchsuchen der Vererbungshierarchie unterbunden und die Leistung u. U. verbessert.

CA1814: Verzweigte Arrays mehrdimensionalen Arrays vorziehen

Ein verzweigtes Array ist ein Array, dessen Elemente wiederum Arrays sind. Die Arrays, die die Elemente bilden, können unterschiedliche Größen haben, was bei einigen Gruppen von Daten dazu führt, dass weniger Speicherplatz vergeudet wird.

CA1815: Equals und Gleichheitsoperator für Werttypen überschreiben

Bei Werttypen wird die Reflection-Bibliothek von der geerbten Implementierung von Equals verwendet und der Inhalt aller Felder verglichen. Reflection ist rechenintensiv, und das Überprüfen eines jeden Felds auf Gleichheit ist eventuell unnötig. Wenn Sie erwarten, dass die Benutzer Instanzen vergleichen oder sortieren bzw. dass sie die Instanzen als Schlüssel für Hashtabellen verwenden, sollte der Werttyp Equals implementieren.

CA1816: GC.SuppressFinalize korrekt aufrufen

Eine Methode, die eine Implementierung von Dispose bildet, ruft nicht GC.SuppressFinalize auf, oder eine Methode, die keine Implementierung von Dispose bildet, ruft GC.SuppressFinalize auf, oder eine Methode ruft GC.SuppressFinalize auf und übergibt ein anderes Element als dieses (Me in Visual Basic).

CA1819: Eigenschaften sollten keine Arrays zurückgeben

Von Eigenschaften zurückgegebene Arrays sind nicht schreibgeschützt, auch wenn die Eigenschaft schreibgeschützt ist. Damit das Array gegen Manipulationen geschützt bleibt, muss die Eigenschaft eine Kopie des Arrays zurückgeben. Normalerweise verstehen die Benutzer nicht, welche negativen Auswirkungen der Aufruf einer solchen Eigenschaft auf die Leistung hat.

CA1820: Mithilfe der Zeichenfolgenlänge auf leere Zeichenfolgen prüfen

Der Vergleich von Zeichenfolgen mit der String.Length-Eigenschaft oder der String.IsNullOrEmpty-Methode führt erheblich schneller zu Ergebnissen als das Verwenden von Equals.

CA1821: Leere Finalizer entfernen

Finalizer sollten möglichst vermieden werden, da durch das Verfolgen der Objektlebensdauer zusätzliche Leistung beansprucht wird. Ein leerer Finalizer verursacht zusätzlichen Mehraufwand ohne Nutzen.

CA1822: Member als statisch markieren

Member, die nicht auf Instanzdaten zugreifen oder keine Instanzmethoden aufrufen, können als static markiert werden (Shared in Visual Basic). Danach gibt der Compiler nicht-virtuelle Aufrufsites an diese Member aus. Dies kann zu einer messbaren Leistungssteigerung für leistungsabhängigen Code führen.

CA1823: Nicht verwendete private Felder vermeiden

Es wurden private Felder erkannt, auf die in der Assembly anscheinend kein Zugriff erfolgt.

CA1824: Assemblys mit NeutralResourcesLanguageAttribute markieren

Mit dem NeutralResourcesLanguage-Attribut wird dem ResourceManager die Sprache mitgeteilt, in der die Ressourcen einer neutralen Kultur für eine Assembly angezeigt wurden. Auf diese Weise wird die Suchleistung für die erste zu ladende Ressource verbessert und Ihr Workingset kann sich verkleinern.

CA1900: Werttypfelder sollten portabel sein

Anhand dieser Regel wird überprüft, ob die mit explizitem Layout deklarierten Strukturen korrekt ausgerichtet werden, wenn sie auf 64-Bit-Betriebssystemen an nicht verwalteten Code gemarshallt werden.

CA1901: Deklarationen von P/Invoke müssen portabel sein

Diese Regel wertet die Größe der einzelnen Parameter und den Rückgabewert einer P/Invoke-Deklaration aus und überprüft die zugehörige Größe beim Marshallen an nicht verwalteten Code unter einem 32-Bit- oder 64-Bit-Betriebssystem.

CA2000: Objekte verwerfen, bevor Bereich verloren geht

Da eine Ausnahme auftreten kann, durch die die Ausführung eines Objektfinalizers verhindert wird, sollte das Objekt explizit verworfen werden, bevor sich sämtliche Verweise auf dieses außerhalb des Bereichs befinden.

CA2001: Keine problematischen Methoden aufrufen

Ein Member ruft eine möglicherweise gefährliche oder problematische Methode auf.

CA2002: Auf Objekten mit schwacher Identität nicht sperren

Ein Objekt hat eine schwache Identität, wenn ein Zugriff darauf über Grenzen von Anwendungsdomänen hinweg möglich ist. Ein Thread, der eine Sperre für ein Objekt zu erhalten versucht, das über eine schwache Identität verfügt, kann durch einen zweiten Thread in einer anderen Anwendungsdomäne blockiert werden, der eine Sperre für das gleiche Objekt besitzt.

CA2003: Fibers nicht als Threads behandeln

Ein verwalteter Thread wird als Win32-Thread behandelt.

CA2004: Aufrufe an GC.KeepAlive entfernen

Wenn Sie zur Verwendung von SafeHandle wechseln, entfernen Sie alle Aufrufe an GC.KeepAlive (Objekt). In diesem Fall sollten Klassen GC.KeepAlive nicht aufrufen müssen, vorausgesetzt, sie weisen keinen Finalizer auf, sondern verwenden zum Beenden des Betriebssystemhandles SafeHandle.

CA2006: SafeHandle verwenden, um systemeigene Ressourcen zu kapseln

Die Verwendung von IntPtr in verwaltetem Code kann auf ein potenzielles Sicherheitsrisiko und Zuverlässigkeitsproblem hinweisen. Alle Vorkommen von IntPtr müssen daher überprüft werden, um festzustellen, ob stattdessen die Verwendung von SafeHandle (oder einer ähnlichen Technologie) erforderlich ist.

CA2100: SQL-Abfragen auf Sicherheitsrisiken überprüfen

Eine Methode legt die System.Data.IDbCommand.CommandText-Eigenschaft mithilfe einer Zeichenfolge fest, die aus einem Zeichenfolgenargument für die Methode erstellt wird. Diese Regel setzt voraus, dass das Zeichenfolgenargument Benutzereingaben enthält. Eine aus Benutzereingaben erstellte SQL-Befehlszeichenfolge ist anfällig für SQL-Injection-Angriffe.

CA2101: Marshalling für P/Invoke-Zeichenfolgenargumente festlegen

Ein Plattformaufrufmember lässt teilweise vertrauenswürdige Aufrufer zu, enthält einen Zeichenfolgenparameter und führt kein explizites Marshalling der Zeichenfolge durch. Auf diese Weise kann potenziell eine Sicherheitslücke verursacht werden.

CA2102: Nicht-CLSCompliant-Ausnahmen in allgemeinen Handlern abfangen

Ein Member in einer Assembly, die nicht mit dem RuntimeCompatibilityAttribute bzw. mit RuntimeCompatibility(WrapNonExceptionThrows = false) gekennzeichnet ist, enthält einen Catch-Block zur Behandlung von System.Exception und keinen unmittelbar folgenden allgemeinen Catch-Block.

CA2103: Imperative Sicherheit überprüfen

Eine Methode verwendet imperative Sicherheit und erstellt möglicherweise die Berechtigung mit Zustandsinformationen oder Rückgabewerten, die sich ändern können, während die Forderung wirksam ist. Verwenden Sie, wenn irgend möglich, deklarative Sicherheit.

CA2104: Schreibgeschützte änderbare Referenztypen nicht deklarieren

Ein extern sichtbarer Typ enthält ein extern sichtbares schreibgeschütztes Feld, bei dem es sich um einen änderbaren Referenztyp handelt. Ein änderbarer Typ ist ein Typ, dessen Instanzdaten geändert werden können.

CA2105: Arrayfelder dürfen nicht schreibgeschützt sein

Wenn Sie den schreibgeschützten Modifizierer (ReadOnly in Visual Basic) auf ein Feld mit einem Array anwenden, kann das Feld nicht geändert werden, um auf ein anderes Array zu verweisen. Allerdings können die in einem schreibgeschützten Feld des Arrays gespeicherten Elemente geändert werden.

CA2106: Sichere Bestätigungen

Eine Methode bestätigt eine Berechtigung, und es werden keine Sicherheitsüberprüfungen für den Aufrufer durchgeführt. Das Gewähren einer Sicherheitsberechtigung ohne Sicherheitsüberprüfungen durchzuführen, kann ein ausnutzbares Sicherheitsrisiko in Code hinterlassen.

CA2107: Verwendung von Deny und PermitOnly überprüfen

Die PermitOnly-Methode und die CodeAccessPermission.Deny-Sicherheitsaktionen sollten nur von Entwicklern mit sehr guten Kenntnissen der .NET Framework-Sicherheit verwendet werden. Code, in dem diese Sicherheitsaktionen verwendet werden, sollte einer Sicherheitsüberprüfung unterzogen werden.

CA2108: Deklarative Sicherheit auf Werttypen überprüfen

Ein öffentlicher oder geschützter Werttyp wird durch Datenzugriff oder Linkaufrufe gesichert.

CA2109: Sichtbare Ereignishandler überprüfen

Eine öffentliche oder geschützte Ereignisbehandlungsmethode wurde erkannt. Ereignisbehandlungsmethoden sollten nur dann verfügbar gemacht werden, wenn dies absolut notwendig ist.

CA2111: Zeiger sollten nicht sichtbar sein.

Ein Zeiger ist nicht privat, intern oder schreibgeschützt. Bösartiger Code kann den Wert des Zeigers ändern und damit potenziell Zugriffe auf beliebige Speicherbereiche ermöglichen oder Anwendungs- bzw. Systemfehler verursachen.

CA2112: Gesicherte Typen sollten keine Felder verfügbar machen.

Ein öffentlicher oder geschützter Typ enthält öffentliche Felder und wird durch Linkaufrufe gesichert. Wenn Code auf eine Instanz eines Typs zugreifen muss, der durch einen Linkaufruf gesichert ist, muss der Code für den Zugriff auf die Felder des Typs nicht die Anforderungen des Linkaufrufs erfüllen.

CA2114: Methodensicherheit sollte Superset des Typs sein

Eine Methode sollte bei der gleichen Aktion nicht sowohl auf einer Methodenebene als auch auf einer Typebene deklarative Sicherheit aufweisen.

CA2115: GC.KeepAlive beim Verwenden systemeigener Ressourcen aufrufen

Diese Regel erkennt Fehler, die auftreten können, wenn eine nicht verwaltete Ressource freigegeben wird, während sie in nicht verwaltetem Code noch verwendet wird.

CA2116: APTCA-Methoden sollten nur APTCA-Methoden aufrufen

Wenn eine voll vertrauenswürdige Assembly über das APTCA-Attribut (AllowPartiallyTrustedCallers) verfügt und die Assembly Code in einer anderen Assembly ausführt, die keine teilweise vertrauenswürdigen Aufrufer zulässt, kann diese Sicherheitslücke ausgenutzt werden.

CA2117: APTCA-Typen sollten nur APTCA-Basistypen erweitern

Wenn das APTCA-Attribut (AllowPartiallyTrustedCallers) in einer voll vertrauenswürdigen Assembly vorhanden ist und ein in der Assembly enthaltener Typ von einem Typ erbt, der nur voll vertrauenswürdige Aufrufer zulässt, können Sicherheitslücken entstehen, die sich für Angriffe ausnutzen lassen.

CA2118: Überprüfen der Verwendung von SuppressUnmanagedCodeSecurityAttribute

SuppressUnmanagedCodeSecurityAttribute ändert das Standardverhalten des Sicherheitssystems für Member, die nicht verwalteten Code ausführen, der COM-Interop oder Plattformaufrufe verwendet. Dieses Attribut wird hauptsächlich verwendet, um die Leistung zu erhöhen. Der Leistungszuwachs geht jedoch mit beträchtlichen Sicherheitsrisiken einher.

CA2119: Methoden versiegeln, die die Bedingungen privater Schnittstellen erfüllen

Ein vererbbarer öffentlicher Typ stellt eine überschreibbare Methodenimplementierung einer internen Schnittstelle (Friend in Visual Basic) bereit. Um einen Verstoß gegen diese Regel zu beheben, verhindern Sie, dass die Methode außerhalb der Assembly überschrieben wird.

CA2120: Sichere Serialisierungskonstruktoren

Dieser Typ verfügt über einen Konstruktor, der ein System.Runtime.Serialization.SerializationInfo-Objekt und ein System.Runtime.Serialization.StreamingContext-Objekt (die Signatur des Serialisierungskonstruktors) akzeptiert. Dieser Konstruktor ist nicht durch eine Sicherheitsüberprüfung gesichert. Dagegen ist mindestens einer der normalen Konstruktoren des Typs gesichert.

CA2121: Statische Konstruktoren sollten privat sein

Das System ruft den statischen Konstruktor auf, bevor die erste Instanz des Typs erzeugt wird bzw. bevor auf irgendwelche statischen Member verwiesen wird. Wenn ein statischer Konstruktor nicht privat ist, kann er von Code aufgerufen werden, der nicht Systemcode ist. Je nach den Operationen innerhalb des Konstruktors kann dies zu unerwartetem Verhalten führen.

CA2122: Methoden mit Linkaufrufen nicht indirekt verfügbar machen

Ein öffentlicher oder geschützter Member enthält Linkaufrufe und wird von einem Member aufgerufen, der keine Sicherheitsüberprüfungen ausführt. Ein Linkaufruf überprüft nur die Berechtigungen des unmittelbaren Aufrufers.

CA2123: Überschreibungslinkaufrufe sollten mit der Basis identisch sein

Durch diese Regel wird eine Methode mit ihrer Basismethode verglichen. Bei dieser handelt es sich entweder um eine Schnittstelle oder um eine virtuelle Methode in einem anderen Typ. Anschließend werden die Linkaufruf mit denen der Schnittstelle bzw. virtuellen Methode verglichen. Bei einem Verstoß gegen diese Regel kann ein böswilliger Aufrufer den Linkaufruf einfach durch Aufruf der ungesicherten Methode umgehen.

CA2124: Anfällige finally-Klauseln mit äußerem try-Block umschließen

Eine öffentliche oder geschützte Methode enthält einen try/finally-Block. Durch den finally-Block, der nicht wiederum in einen finally-Block eingeschlossen ist, wird der Sicherheitszustand zurückgesetzt.

CA2126: Typlinkaufrufe erfordern Vererbungsanforderungen

Ein öffentlicher unversiegelter Typ wird durch einen Linkaufruf geschützt und verfügt über eine überschreibbare Methode. Weder der Typ noch die Methode wird mit einer Vererbungsanforderung geschützt.

CA2136: Member dürfen keine miteinander in Konflikt stehenden Transparenzanmerkungen aufweisen

Relevanter Code kann nicht in einer zu 100 % transparenten Assembly auftreten. Durch diese Regel werden zu 100 % transparente Assemblys für alle SecurityCritical-Anmerkungen auf Typ-, Feld- und Methodenebene analysiert.

CA2147: Transparente Methoden dürfen keine Sicherheitsassertionen verwenden

Mit dieser Regel werden alle Methoden und Typen in einer Assembly analysiert, die entweder zu 100 % aus transparentem Code oder aus einer Kombination aus transparentem und kritischem Code besteht. Anschließend werden alle deklarativen oder imperativen Verwendungen von Assert gekennzeichnet.

CA2140: Transparenter Code darf nicht auf sicherheitskritische Elemente verweisen

Mit SecurityTransparentAttribute markierte Methoden rufen nicht öffentliche Member auf, die als SecurityCritical markiert sind. Diese Regel analysiert alle Methoden und Typen in einer Assembly, die gemischt transparent/kritisch ist, und kennzeichnet alle Aufrufe aus transparentem Code an nicht öffentlichen kritischen Code, der nicht als SecurityTreatAsSafe gekennzeichnet ist.

CA2200: Erneut ausführen, um Stapeldetails beizubehalten

Eine Ausnahme wird erneut ausgelöst, und die Ausnahme wird in der throw-Anweisung explizit angegeben. Wenn eine Ausnahme durch Angeben der Ausnahme in der throw-Anweisung erneut ausgelöst wird, geht die Liste der Methoden, die zwischen der Methode, durch die die Ausnahme ursprünglich ausgelöst wurde, und der aktuellen Methode aufgerufen wurden, verloren.

CA2201: Keine reservierten Ausnahmetypen auslösen

Dadurch ist der ursprüngliche Fehler nur schwer zu erkennen und zu debuggen.

CA2202: Objekte nicht mehrmals verwerfen

Eine Methodenimplementierung enthält Codepfade, die für dasselbe Objekt mehrere Aufrufe von System.IDisposable.Dispose oder einer Entsprechung von Dispose (z. B. einer Close()-Methode für bestimmte Typen) verursachen können.

CA2204: Literale sollten eine korrekte Rechtschreibung aufweisen

Ein Zeichenfolgenliteral in einem Methodentext enthält mindestens ein Wort, das von der Rechtschreibprüfung aus der Microsoft-Bibliothek nicht erkannt wird.

CA2205: Verwaltete Entsprechungen der Win32 API verwenden

Eine Plattformaufrufmethode ist definiert, und in der .NET Framework-Klassenbibliothek ist eine Methode mit der entsprechenden Funktionalität vorhanden.

CA2207: Statische Felder für Werttyp inline initialisieren

Ein Werttyp deklariert einen expliziten statischen Konstruktor. Um einen Verstoß gegen diese Regel zu beheben, initialisieren Sie alle statischen Daten nach deren Deklaration und entfernen den statischen Konstruktor.

CA2208: Argumentausnahmen korrekt instanziieren

Der (parameterlose) Standardkonstruktor eines Ausnahmetyps wird aufgerufen, der ArgumentException ist oder davon abgeleitet wird, oder ein falsches Zeichenfolgenargument wird an einen parametrisierten Konstruktor eines Ausnahmetyps übergeben, der ArgumentException ist oder davon abgeleitet wird.

CA2210: Assemblys müssen gültige starke Namen aufweisen

Der starke Name schützt Clients vor dem versehentlichen Laden einer manipulierten Assembly. Assemblys ohne starke Namen sollten nur in ganz bestimmten Szenarien bereitgestellt werden. Wenn Sie nicht einwandfrei signierte Assemblys freigeben oder verteilen, kann die Assembly manipuliert werden, die Common Language Runtime lädt die Assembly unter Umständen nicht, oder der Benutzer muss die Überprüfung auf dem Computer deaktivieren.

CA2211: Nicht konstante Felder sollten nicht sichtbar sein

Statische Felder, die weder konstant noch schreibgeschützt sind, sind nicht threadsicher. Der Zugriff auf ein solches Feld muss sorgfältig kontrolliert werden und erfordert fortgeschrittene Programmiertechniken zur Synchronisierung des Zugriffs auf das Klassenobjekt.

CA2212: ServicedComponents nicht mit WebMethod markieren

Eine Methode in einem Typ, der von System.EnterpriseServices.ServicedComponent erbt, wird mit System.Web.Services.WebMethodAttribute markiert. Da das Verhalten von WebMethodAttribute und einer ServicedComponent-Methode sowie deren Anforderungen an den Kontext sowie den Transaktionsablauf zu Konflikten führen, ist das Verhalten der Methode in bestimmten Szenarien fehlerhaft.

CA2213: Verwerfbare Felder verwerfen

Ein Typ, der System.IDisposable implementiert, deklariert Felder von Typen, die ebenfalls IDisposable implementieren. Die Dispose-Methode des Felds wird nicht von der Dispose-Methode des deklarierenden Typs aufgerufen.

CA2214: Überschreibbare Methoden in Konstruktoren nicht aufrufen

Wenn ein Konstruktor eine virtuelle Methode aufruft, wurde möglicherweise der Konstruktor für die Instanz, von der die Methode aufgerufen wird, nicht ausgeführt.

CA2215: Dispose-Methoden müssen die Dispose-Funktion der Basisklasse aufrufen

Wenn ein Typ von einem Typ erbt, der verworfen werden kann, muss von seiner Dispose-Methode die Dispose-Methode des Basistyps aufgerufen werden.

CA2216: Verwerfbare Typen sollten einen Finalizer deklarieren

Ein Typ, der System.IDisposable implementiert und Felder besitzt, bei denen die Verwendung nicht verwalteter Ressourcen empfohlen wird, implementiert keinen Finalizer wie von Object.Finalize beschrieben.

CA2217: Enumerationen nicht mit FlagsAttribute markieren

Eine extern sichtbare Enumeration wird mit FlagsAttribute gekennzeichnet und weist einen oder mehrere Werte auf, die keine Potenzen von 2 und keine Kombination von anderen in der Enumeration definierten Werten bilden.

CA2218: GetHashCode beim Überschreiben von Equals überschreiben

GetHashCode gibt einen Wert auf der Grundlage der aktuellen Instanz zurück, die sich für Hashalgorithmen und Datenstrukturen eignet, z. B. für eine Hashtabelle. Zwei Objekte, die denselben Typ aufweisen und gleich sind, müssen den gleichen Hashcode zurückgeben.

CA2219: Keine Ausnahmen in Ausnahmeklauseln auslösen

Wenn eine Ausnahme in einer finally-Klausel oder fault-Klausel ausgelöst wird, wird die aktive Ausnahme von der neuen Ausnahme verdeckt. Wenn eine Ausnahme in einer filter-Klausel ausgelöst wird, fängt die Laufzeit die Ausnahme automatisch ab. Dadurch ist der ursprüngliche Fehler nur schwer zu erkennen und zu debuggen.

CA2220: Finalizer sollten Basisklassen-Finalizer aufrufen

Der Abschluss muss durch die Vererbungshierarchie weitergegeben werden. Um dies zu garantieren, müssen die Typen die Finalize-Methode ihrer Basisklasse in der eigenen Finalize-Methode aufrufen.

CA2221: Finalizer sollten geschützt sein

Finalizer müssen den Familienzugriffsmodifizierer verwenden.

CA2222: Sichtbarkeit für geerbte Member nicht verringern

Sie sollten den Zugriffsmodifizierer für geerbte Member nicht ändern. Wenn Sie einen geerbten Member in private ändern, werden Aufrufer nicht am Zugriff auf die Implementierung der Basisklasse der Methode gehindert.

CA2223: Member sollten sich durch mehr als nur den Rückgabetyp unterscheiden

Die Common Language Runtime lässt die Verwendung von Rückgabetypen zu, mit deren Hilfe zwischen anderweitig identischen Membern unterschieden werden kann. Trotzdem ist diese Funktion nicht in der Common Language Specification (CLS) enthalten und keine gebräuchliche Funktion von .NET-Programmiersprachen.

CA2224: Equals beim Überladen von Gleichheitsoperatoren überschreiben

Ein öffentlicher Typ implementiert den Gleichheitsoperator, überschreibt jedoch Object.Equals nicht.

CA2225: Operatorüberladungen weisen benannte Alternativen auf

Es wurde eine Operatorüberladung erkannt, und die erwartete benannte Alternativmethode wurde nicht gefunden. Der benannte Alternativmember gewährt auf die gleiche Funktionalität wie der Operator Zugriff und wird für Entwickler bereitgestellt, die in Sprachen programmieren, in denen überladene Operatoren nicht unterstützt werden.

CA2226: Operatoren sollten symmetrische Überladungen aufweisen

Ein Typ implementiert den Gleichheits- oder Ungleichheitsoperator, ohne den entgegengesetzten Operator zu implementieren.

CA2227: Auflistungseigenschaften sollten schreibgeschützt sein

Eine schreibbare Auflistungseigenschaft ermöglicht es Benutzern, die Auflistung durch eine andere Auflistung zu ersetzen. Eine schreibgeschützte Eigenschaft sorgt dafür, dass die Auflistung nicht mehr ersetzt wird, lässt aber dennoch das Festlegen einzelner Member zu.

CA2228: Nicht freigegebene Ressourcenformate nicht veröffentlichen

Ressourcendateien, die mithilfe von Vorabversionen von .NET Framework erstellt wurden, können von den unterstützten Versionen von .NET Framework möglicherweise nicht verwendet werden.

CA2229: Serialisierungskonstruktoren implementieren

Um einen Verstoß gegen diese Regel zu beheben, implementieren Sie den Serialisierungskonstruktor. Definieren Sie den Konstruktor bei einer versiegelten Klasse als privaten Konstruktor. Definieren Sie ihn andernfalls als geschützten Konstruktor.

CA2230: params für Variablenargumente verwenden

Ein öffentlicher oder geschützter Typ enthält eine öffentliche oder geschützte Methode, die statt des params-Schlüsselworts die VarArgs-Aufrufkonvention verwendet.

CA2231: Überladen Sie den Gleichheitsoperator beim Überschreiben von ValueType.Equals

Ein Werttyp überschreibt Object.Equals, implementiert jedoch nicht den Gleichheitsoperator.

CA2232: Windows Forms-Einstiegspunkte mit STAThread markieren

STAThreadAttribute gibt an, dass das COM-Threadingmodell für die Anwendung ein Singlethread-Apartment ist. Dieses Attribut muss am Einstiegspunkt jeder Anwendung vorhanden sein, die Windows Forms verwendet. Wird es weggelassen, funktionieren die Windows-Komponenten eventuell nicht richtig.

CA2233: Vorgänge sollten nicht überlaufen

Arithmetische Operationen sollten erst nach einer Validierung der Operanden ausgeführt werden, um sicherzustellen, dass das Ergebnis der Operation nicht außerhalb des Bereichs möglicher Werte der beteiligten Datentypen liegt.

CA2234: Übergeben Sie System.Uri-Objekte anstelle von Zeichenfolgen

Eine Methode wird aufgerufen, die über einen Zeichenfolgenparameter verfügt, dessen Name "uri", "URI", "urn", "URN", "url" oder "URL" enthält. Der deklarierende Typ der Methode enthält eine entsprechende Methodenüberladung, die über einen System.Uri-Parameter verfügt.

CA2235: Alle nicht serialisierbaren Felder markieren

Ein Instanzenfeld eines Typs, der nicht serialisierbar ist, ist in einem serialisierbaren Typ deklariert.

CA2236: Basisklassenmethoden auf ISerializable-Typen aufrufen

Um einen Verstoß gegen diese Regel zu beheben, rufen Sie die GetObjectData-Methode oder den Serialisierungskonstruktor des Basistyps in der Methode oder im Konstruktor des entsprechenden abgeleiteten Typs auf.

CA2237: Markieren von ISerializable-Typen mit SerializableAttribute

Damit Typen von der Common Language Runtime als serialisierbar erkannt werden, müssen sie mit dem SerializableAttribute-Attribut markiert werden, auch wenn der Typ durch die Implementierung der ISerializable-Schnittstelle eine benutzerdefinierte Serialisierungsroutine verwendet.

CA2238: Serialisierungsmethoden korrekt implementieren

Eine Methode, die ein Serialisierungsereignis behandelt, verfügt nicht über die richtige Signatur, den richtigen Rückgabetyp oder die richtige Sichtbarkeit.

CA2239: Deserialisierungsmethoden für optionale Felder angeben

Ein Typ verfügt über ein Feld, das mit dem System.Runtime.Serialization.OptionalFieldAttribute-Attribut gekennzeichnet ist, und gibt keine Methoden für die Deserialisierungsereignisbehandlung an.

CA2240: ISerializable ordnungsgemäß implementieren

Um einen Verstoß gegen diese Regel zu beheben, stellen Sie sicher, dass die GetObjectData-Methode sichtbar und überschreibbar ist und dass alle Instanzenfelder in den Serialisierungsprozess einbezogen werden oder explizit mit dem NonSerializedAttribute-Attribut markiert sind.

CA2241: Geeignete Argumente für Formatierungsmethoden angeben

Das an System.String.Format übergebene format-Argument enthält keine Formatelemente, die den einzelnen Objektargumenten entsprechen oder umgekehrt.

CA2242: Ordnungsgemäß auf NaN testen

Mit diesem Ausdruck testen Sie einen Wert auf Single.Nan oder Double.Nan. Testen Sie den Wert mithilfe von Single.IsNan(Single) oder Double.IsNan(Double).

CA2243: Attribute-Zeichenfolgenliterale müssen stets richtig analysiert werden

Der Parameter eines Zeichenfolgenliterals für ein Attribut wird für eine URL, GUID oder Version nicht ordnungsgemäß analysiert.