Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Regelsatz für die erweiterten Microsoft-Entwurfsrichtlinienregeln erweitert die grundlegenden Entwurfsrichtlinienregeln, um die Benutzerfreundlichkeit und Verwaltbarkeit zu optimieren.Besonderes Augenmerk wird auf Benennungsrichtlinien gelegt.Sie sollten erwägen, diesen Regelsatz einzubeziehen, wenn Ihr Projekt Bibliothekscode umfasst oder wenn Sie die höchsten Standards zum Schreiben von Code erzwingen möchten, der einfach zu verwalten ist.
Die erweiterten Entwurfsrichtlinienregeln umfassen alle grundlegenden Microsoft-Entwurfsrichtlinienregeln.Die grundlegenden Entwurfsrichtlinienregeln umfassen alle empfohlenen Microsoft-Mindestregeln.Weitere Informationen finden Sie unter Regelsatz für die einfachen Entwurfsrichtlinienregeln für verwalteten Code und unter Regelsatz für verwaltete empfohlene Regeln für verwalteten Code.
In der folgenden Tabelle werden alle erweiterten Microsoft-Regeln für Entwurfsrichtlinien beschrieben.
Regel |
Beschreibung |
|---|---|
Typen, die löschbare Felder besitzen, müssen gelöscht werden können |
|
Ereignishandler korrekt deklarieren |
|
Assemblys mit AssemblyVersionAttribute markieren |
|
Schnittstellenmethoden sollten von untergeordneten Typen aufgerufen werden können |
|
Typen, die systemeigene Ressourcen besitzen, müssen gelöscht werden können |
|
P/Invokes in NativeMethods-Klasse verschieben |
|
Basisklassenmethoden nicht ausblenden |
|
IDisposable korrekt implementieren |
|
Keine Ausnahmen an unerwarteten Speicherorten auslösen |
|
Doppelte Zugriffstasten vermeiden |
|
Für P/Invoke müssen Einstiegspunkte vorhanden sein. |
|
P/Invokes dürfen nicht sichtbar sein. |
|
Typen mit automatischem Layout sollten nicht für COM sichtbar sein |
|
GetLastError unmittelbar nach P/Invoke aufrufen |
|
Für COM sichtbare Basistypen sollten für COM sichtbar sein |
|
Die COM-Registrierungsmethoden müssen übereinstimmen. |
|
P/Invokes korrekt deklarieren |
|
Leere Finalizer entfernen |
|
Werttypfelder sollten portabel sein. |
|
Deklarationen von P/Invoke müssen portabel sein. |
|
Auf Objekten mit schwacher Identität nicht sperren |
|
SQL-Abfragen auf Sicherheitsrisiken überprüfen |
|
Marshalling für P/Invoke-Zeichenfolgenargumente festlegen |
|
Deklarative Sicherheit auf Werttypen überprüfen |
|
Zeiger sollten nicht sichtbar sein. |
|
Gesicherte Typen sollten keine Felder verfügbar machen. |
|
Methodensicherheit sollte Superset des Typs sein |
|
APTCA-Methoden sollten nur APTCA-Methoden aufrufen |
|
APTCA-Typen sollten nur APTCA-Basistypen erweitern |
|
Methoden mit Linkaufrufen nicht indirekt verfügbar machen |
|
Überschreibungslinkaufrufe sollten zur Basis identisch sein |
|
Anfällige finally-Klauseln mit äußerem try-Block umschließen |
|
Typlinkaufrufe erfordern Vererbungsanforderungen |
|
Sicherheitsrelevante Typen werden möglicherweise nicht an Typäquivalenz beteiligt |
|
Standardkonstruktoren müssen mindestens so kritisch sein wie die Standardkonstruktoren des Basistyps. |
|
Delegaten müssen an Methoden mit Transparenz konsistenter binden |
|
Methoden müssen konsistente Transparenz halten, während sie Basismethoden überschreiben |
|
Transparente Methoden müssen nur überprüfbares IL enthalten |
|
Transparente Methoden dürfen Methoden mit dem SuppressUnmanagedCodeSecurity-Attribut nicht aufrufen |
|
Transparenter Code darf sicherheitsrelevante Elemente verweisen |
|
Transparente Methoden dürfen LinkDemands nicht erfüllen |
|
Typen müssen mindestens genauso kritisch sein wie ihre Basistypen und Schnittstellen. |
|
Transparente Methoden können nicht Sicherheitsassertions |
|
Transparente Methoden dürfen nicht in systemeigenen Code aufrufen |
|
Erneut ausführen, um Stapeldetails beizubehalten |
|
Objekte nicht mehrmals verwerfen |
|
Statische Felder für Werttyp inline initialisieren |
|
ServicedComponents nicht mit WebMethod markieren |
|
Verwerfbare Felder verwerfen |
|
Überschreibbare Methoden in Konstruktoren nicht aufrufen |
|
Verwerfbare Typen sollten einen Finalizer deklarieren |
|
Finalizer sollten Basisklassen-Finalizer aufrufen |
|
Serialisierungskonstruktoren implementieren |
|
Überladen Sie den Gleichheitsoperator beim Überschreiben von ValueType.Equals. |
|
Windows Forms-Einstiegspunkte mit STAThread markieren |
|
Alle nicht serialisierbaren Felder markieren |
|
Basisklassenmethoden auf ISerializable-Typen aufrufen |
|
ISerializable-Typen mit SerializableAttribute markieren |
|
Serialisierungsmethoden korrekt implementieren |
|
ISerializable ordnungsgemäß implementieren |
|
Geben Sie die korrekte Anzahl für Formatierungsmethoden an. |
|
Ordnungsgemäß auf NaN testen |
|
Statische Member nicht in generischen Typen deklarieren |
|
Generische Listen nicht verfügbar machen |
|
Generische Ereignishandlerinstanzen verwenden |
|
Generische Methoden müssen den Typparameter angeben |
|
Übermäßige Anzahl von Parametern in generischen Typen vermeiden |
|
Generische Typen in Membersignaturen nicht schachteln |
|
Nach Möglichkeit Generika verwenden |
|
Enumerationen müssen einen Wert von 0 (null) aufweisen |
|
Auflistungen müssen eine generische Schnittstelle implementieren |
|
Basistypen als Parameter übergeben |
|
Abstrakte Typen dürfen keine Konstruktoren aufweisen |
|
Gleichheitsoperator beim Überladen von Addition und Subtraktion überladen |
|
Assemblys mit CLSCompliantAttribute markieren |
|
Assemblys mit ComVisibleAttribute markieren |
|
Attribute mit AttributeUsageAttribute markieren |
|
Accessoren für Attributargumente definieren |
|
Indexer sollten nicht mehrdimensional sein |
|
Nach Möglichkeit Eigenschaften verwenden |
|
Sich wiederholende Argumente durch ein Parameterarray ersetzen |
|
Standardparameter sollten nicht verwendet werden |
|
Enumerationen mit FlagsAttribute markieren |
|
Der Enumerationsspeicher sollte Int32 sein. |
|
Nach Möglichkeit Ereignisse verwenden |
|
Allgemeine Ausnahmetypen nicht auffangen |
|
Standardausnahmekonstruktoren implementieren |
|
Geschachtelte Typen sollten nicht sichtbar sein |
|
ICollection-Implementierungen weisen Member mit starker Typisierung auf |
|
Methoden bei vergleichbaren Typen überschreiben |
|
Enumeratoren sollten eine starke Typisierung aufweisen |
|
Listen weisen eine starke Typisierung auf |
|
ObsoleteAttribute-Meldung bereitstellen |
|
Ganzzahliges Argument oder Zeichenfolgenargument für Indexer verwenden |
|
Eigenschaften sollten nicht lesegeschützt sein |
|
Gleichheitsoperator für Referenztypen nicht überladen |
|
Geschützte Member in versiegelten Typen nicht deklarieren |
|
Virtuelle Member in versiegelten Typen nicht deklarieren |
|
Typen in Namespaces deklarieren |
|
Sichtbare Instanzfelder nicht deklarieren |
|
Statische Haltertypen sollten versiegelt sein |
|
Statische Haltertypen sollten keine Konstruktoren aufweisen |
|
URI-Parameter dürfen keine Zeichenfolgen sein. |
|
URI-Rückgabewerte dürfen keine Zeichenfolgen sein. |
|
URI-Eigenschaften dürfen keine Zeichenfolgen sein. |
|
URI-Überladungen vom Typ string rufen Überladungen vom Typ System.Uri auf. |
|
Typen sollten bestimmte Basistypen nicht erweitern |
|
Member sollten bestimmte konkrete Typen nicht verfügbar machen |
|
Ausnahmen sollten öffentlich sein. |
|
Variablennamen sollten nicht mit Feldnamen übereinstimmen |
|
Übermäßige Komplexität vermeiden |
|
Bezeichner sollten sich nicht nur durch die Groß-/Kleinschreibung unterscheiden |
|
Bezeichner sollten nicht mit Schlüsselwörtern übereinstimmen |
|
Nicht verwendete Parameter überprüfen |
|
Nicht verwendete lokale Variablen entfernen |
|
Übermäßige lokale Variablen vermeiden |
|
Statische Felder von Referenztypen inline initialisieren |
|
Nicht aufgerufenen privaten Code vermeiden |
|
Nicht instanziierte interne Klassen vermeiden |
|
Nicht versiegelte Attribute vermeiden |
|
Verzweigte Arrays mehrdimensionalen Arrays vorziehen |
|
Equals und Gleichheitsoperator für Werttypen überschreiben |
|
Eigenschaften sollten keine Arrays zurückgeben |
|
Mithilfe der Zeichenfolgenlänge auf leere Zeichenfolgen prüfen |
|
Member als statisch markieren |
|
Nicht verwendete private Felder vermeiden |
|
Keine reservierten Ausnahmetypen auslösen |
|
Verwaltete Entsprechungen der Win32 API verwenden |
|
Argumentausnahmen korrekt instanziieren |
|
Nicht konstante Felder sollten nicht sichtbar sein. |
|
Enumerationen nicht mit FlagsAttribute markieren |
|
Keine Ausnahmen in Ausnahmeklauseln auslösen |
|
Finalizer sollten geschützt sein |
|
Sichtbarkeit für geerbte Member nicht verringern |
|
Member sollten sich durch mehr als nur den Rückgabetyp unterscheiden. |
|
Überschreibungsgleichgestellte auf Überladenoperatorgleichgestellten |
|
Operatorüberladungen weisen benannte Alternativen auf |
|
Operatoren sollten symmetrische Überladungen aufweisen |
|
Auflistungseigenschaften sollten schreibgeschützt sein |
|
params für Variablenargumente verwenden |
|
Übergeben Sie System.Uri-Objekte anstelle von Zeichenfolgen. |
|
Deserialisierungsmethoden für optionale Felder angeben |
|
Namespaces mit wenigen Typen vermeiden |
|
out-Parameter vermeiden |
|
Leere Schnittstellen vermeiden |
|
Typen nicht als Verweis übergeben |
|
Argumente von öffentlichen Methoden validieren |
|
Übermäßige Vererbung vermeiden |
|
Irreführende Feldnamen überprüfen |
|
Nicht wartbaren Code vermeiden |
|
Übermäßige Klassenkopplungen vermeiden |
|
Enumerationswerte nicht mit "Reserviert" benennen |
|
Bei zusammengesetzten Begriffen in Ressourcenzeichenfolgen sollte die Groß-/Kleinschreibung beachtet werden |
|
Bei zusammengesetzten Begriffen sollte die Groß-/Kleinschreibung beachtet werden |
|
Ressourcenzeichenfolgen sollten korrekt geschrieben werden |
|
Bezeichner sollten korrekt geschrieben werden |
|
Bezeichner sollten keine Unterstriche enthalten |
|
Bei Bezeichnern sollte die Groß-/Kleinschreibung beachtet werden |
|
Bezeichner sollten ein richtiges Suffix aufweisen |
|
Bezeichner sollten kein falsches Suffix aufweisen |
|
Keine Typnamen als Präfixe für Enumerationswerte verwenden |
|
Ereignisse sollten kein Before- oder After-Präfix aufweisen |
|
Flags-Enumerationen sollten Pluralnamen aufweisen |
|
Bezeichner sollten ein korrektes Präfix aufweisen |
|
Nur FlagsAttribute-Enumerationen sollten Pluralnamen aufweisen |
|
Parameternamen sollten nicht mit Membernamen übereinstimmen |
|
Bezeichner dürfen keine Typnamen enthalten. |
|
Eigenschaftennamen sollten nicht mit Get-Methoden übereinstimmen |
|
Bezeichner sollten kein falsches Präfix aufweisen |
|
Typnamen sollten nicht mit Namespaces übereinstimmen |
|
Parameternamen sollten mit der Basisdeklaration übereinstimmen |
|
Bevorzugte Begriffe verwenden |
|
Literale sollten eine korrekte Rechtschreibung aufweisen. |