Extended Design Guidelines Rules rule set for managed code

Note

This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, use the version selector at the top left. We recommend upgrading to Visual Studio 2019. Download it here

The Microsoft Extended Design Guideline Rules rule set expands on the basic design guideline rules to maximize the usability and maintainability issues that are reported. Extra emphasis is placed on naming guidelines. You should consider including this rule set if your project includes library code or if you want to enforce the highest standards for writing code that is easy to maintain.

The Extended Design Guideline Rules include all of the Microsoft Basic Design Guideline Rules. The Basic Design Guideline Rules include all of the Microsoft Minimum Recommended Rules. For more information, see Basic Design Guideline Rules rule set for managed code and Managed Recommended Rules rule set for managed code

The following table describes all the rules in the Microsoft Extended Design Guideline Rules rule set.

Rule Description
CA1001 Types that own disposable fields should be disposable
CA1009 Declare event handlers correctly
CA1016 Mark assemblies with AssemblyVersionAttribute
CA1033 Interface methods should be callable by child types
CA1049 Types that own native resources should be disposable
CA1060 Move P/Invokes to NativeMethods class
CA1061 Do not hide base class methods
CA1063 Implement IDisposable correctly
CA1065 Do not raise exceptions in unexpected locations
CA1301 Avoid duplicate accelerators
CA1400 P/Invoke entry points should exist
CA1401 P/Invokes should not be visible
CA1403 Auto layout types should not be COM visible
CA1404 Call GetLastError immediately after P/Invoke
CA1405 COM visible type base types should be COM visible
CA1410 COM registration methods should be matched
CA1415 Declare P/Invokes correctly
CA1821 Remove empty finalizers
CA1900 Value type fields should be portable
CA1901 P/Invoke declarations should be portable
CA2002 Do not lock on objects with weak identity
CA2100 Review SQL queries for security vulnerabilities
CA2101 Specify marshaling for P/Invoke string arguments
CA2108 Review declarative security on value types
CA2111 Pointers should not be visible
CA2112 Secured types should not expose fields
CA2114 Method security should be a superset of type
CA2116 APTCA methods should only call APTCA methods
CA2117 APTCA types should only extend APTCA base types
CA2122 Do not indirectly expose methods with link demands
CA2123 Override link demands should be identical to base
CA2124 Wrap vulnerable finally clauses in outer try
CA2126 Type link demands require inheritance demands
CA2131 Security critical types may not participate in type equivalence
CA2132 Default constructors must be at least as critical as base type default constructors
CA2133 Delegates must bind to methods with consistent transparency
CA2134 Methods must keep consistent transparency when overriding base methods
CA2137 Transparent methods must contain only verifiable IL
CA2138 Transparent methods must not call methods with the SuppressUnmanagedCodeSecurity attribute
CA2140 Transparent code must not reference security critical items
CA2141 Transparent methods must not satisfy LinkDemands
CA2146 Types must be at least as critical as their base types and interfaces
CA2147 Transparent methods may not use security asserts
CA2149 Transparent methods must not call into native code
CA2200 Rethrow to preserve stack details
CA2202 Do not dispose objects multiple times
CA2207 Initialize value type static fields inline
CA2212 Do not mark serviced components with WebMethod
CA2213 Disposable fields should be disposed
CA2214 Do not call overridable methods in constructors
CA2216 Disposable types should declare finalizer
CA2220 Finalizers should call base class finalizer
CA2229 Implement serialization constructors
CA2231 Overload operator equals on overriding ValueType.Equals
CA2232 Mark Windows Forms entry points with STAThread
CA2235 Mark all non-serializable fields
CA2236 Call base class methods on ISerializable types
CA2237 Mark ISerializable types with SerializableAttribute
CA2238 Implement serialization methods correctly
CA2240 Implement ISerializable correctly
CA2241 Provide correct arguments to formatting methods
CA2242 Test for NaN correctly
CA1000 Do not declare static members on generic types
CA1002 Do not expose generic lists
CA1003 Use generic event handler instances
CA1004 Generic methods should provide type parameter
CA1005 Avoid excessive parameters on generic types
CA1006 Do not nest generic types in member signatures
CA1007 Use generics where appropriate
CA1008 Enums should have zero value
CA1010 Collections should implement generic interface
CA1011 Consider passing base types as parameters
CA1012 Abstract types should not have constructors
CA1013 Overload operator equals on overloading add and subtract
CA1014 Mark assemblies with CLSCompliantAttribute
CA1017 Mark assemblies with ComVisibleAttribute
CA1018 Mark attributes with AttributeUsageAttribute
CA1019 Define accessors for attribute arguments
CA1023 Indexers should not be multidimensional
CA1024 Use properties where appropriate
CA1025 Replace repetitive arguments with params array
CA1026 Default parameters should not be used
CA1027 Mark enums with FlagsAttribute
CA1028 Enum storage should be Int32
CA1030 Use events where appropriate
CA1031 Do not catch general exception types
CA1032 Implement standard exception constructors
CA1034 Nested types should not be visible
CA1035 ICollection implementations have strongly typed members
CA1036 Override methods on comparable types
CA1038 Enumerators should be strongly typed
CA1039 Lists are strongly typed
CA1041 Provide ObsoleteAttribute message
CA1043 Use integral or string argument for indexers
CA1044 Properties should not be write only
CA1046 Do not overload operator equals on reference types
CA1047 Do not declare protected members in sealed types
CA1048 Do not declare virtual members in sealed types
CA1050 Declare types in namespaces
CA1051 Do not declare visible instance fields
CA1052 Static holder types should be sealed
CA1053 Static holder types should not have constructors
CA1054 URI parameters should not be strings
CA1055 URI return values should not be strings
CA1056 URI properties should not be strings
CA1057 String URI overloads call System.Uri overloads
CA1058 Types should not extend certain base types
CA1059 Members should not expose certain concrete types
CA1064 Exceptions should be public
CA1500 Variable names should not match field names
CA1502 Avoid excessive complexity
CA1708 Identifiers should differ by more than case
CA1716 Identifiers should not match keywords
CA1801 Review unused parameters
CA1804 Remove unused locals
CA1809 Avoid excessive locals
CA1810 Initialize reference type static fields inline
CA1811 Avoid uncalled private code
CA1812 Avoid uninstantiated internal classes
CA1813 Avoid unsealed attributes
CA1814 Prefer jagged arrays over multidimensional
CA1815 Override equals and operator equals on value types
CA1819 Properties should not return arrays
CA1820 Test for empty strings using string length
CA1822 Mark members as static
CA1823 Avoid unused private fields
CA2201 Do not raise reserved exception types
CA2205 Use managed equivalents of Win32 API
CA2208 Instantiate argument exceptions correctly
CA2211 Non-constant fields should not be visible
CA2217 Do not mark enums with FlagsAttribute
CA2219 Do not raise exceptions in exception clauses
CA2221 Finalizers should be protected
CA2222 Do not decrease inherited member visibility
CA2223 Members should differ by more than return type
CA2224 Override equals on overloading operator equals
CA2225 Operator overloads have named alternates
CA2226 Operators should have symmetrical overloads
CA2227 Collection properties should be read only
CA2230 Use params for variable arguments
CA2234 Pass System.Uri objects instead of strings
CA2239 Provide deserialization methods for optional fields
CA1020 Avoid namespaces with few types
CA1021 Avoid out parameters
CA1040 Avoid empty interfaces
CA1045 Do not pass types by reference
CA1062 Validate arguments of public methods
CA1501 Avoid excessive inheritance
CA1504 Review misleading field names
CA1505 Avoid unmaintainable code
CA1506 Avoid excessive class coupling
CA1700 Do not name enum values 'Reserved'
CA1701 Resource string compound words should be cased correctly
CA1702 Compound words should be cased correctly
CA1703 Resource strings should be spelled correctly
CA1704 Identifiers should be spelled correctly
CA1707 Identifiers should not contain underscores
CA1709 Identifiers should be cased correctly
CA1710 Identifiers should have correct suffix
CA1711 Identifiers should not have incorrect suffix
CA1712 Do not prefix enum values with type name
CA1713 Events should not have before or after prefix
CA1714 Flags enums should have plural names
CA1715 Identifiers should have correct prefix
CA1717 Only FlagsAttribute enums should have plural names
CA1719 Parameter names should not match member names
CA1720 Identifiers should not contain type names
CA1721 Property names should not match get methods
CA1722 Identifiers should not have incorrect prefix
CA1724 Type Names Should Not Match Namespaces
CA1725 Parameter names should match base declaration
CA1726 Use preferred terms
CA2204 Literals should be spelled correctly