Basic Design Guideline Rules rule set for managed code
Applies to: Visual Studio Visual Studio for Mac
Note
This article applies to Visual Studio 2017. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here
You can use the Microsoft Basic Design Guideline Rules rule set to focus on making your code easier to understand and use. You should include this rule set if your project includes library code or if you want to enforce best practices for code that is easy to maintain.
The Basic Design Guideline Rules include all the rules in the Managed Recommended Rules rule set.
The following table describes all of the rules in the Microsoft Basic Design Guideline Rules rule set.
Rule | Description |
---|---|
CA1000 | Do not declare static members on generic types |
CA1001 | Types that own disposable fields should be disposable |
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 |
CA1009 | Declare event handlers correctly |
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 |
CA1016 | Mark assemblies with AssemblyVersionAttribute |
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 |
CA1033 | Interface methods should be callable by child types |
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 |
CA1049 | Types that own native resources should be disposable |
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 |
CA1060 | Move P/Invokes to NativeMethods class |
CA1061 | Do not hide base class methods |
CA1063 | Implement IDisposable correctly |
CA1064 | Exceptions should be public |
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 |
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 |
CA1821 | Remove empty finalizers |
CA1822 | Mark members as static |
CA1823 | Avoid unused private fields |
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 |
CA2201 | Do not raise reserved exception types |
CA2202 | Do not dispose objects multiple times |
CA2205 | Use managed equivalents of Win32 API |
CA2207 | Initialize value type static fields inline |
CA2208 | Instantiate argument exceptions correctly |
CA2211 | Non-constant fields should not be visible |
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 |
CA2217 | Do not mark enums with FlagsAttribute |
CA2219 | Do not raise exceptions in exception clauses |
CA2220 | Finalizers should call base class finalizer |
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 |
CA2229 | Implement serialization constructors |
CA2230 | Use params for variable arguments |
CA2231 | Overload operator equals on overriding ValueType.Equals |
CA2232 | Mark Windows Forms entry points with STAThread |
CA2234 | Pass System.Uri objects instead of strings |
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 |
CA2239 | Provide deserialization methods for optional fields |
CA2240 | Implement ISerializable correctly |
CA2241 | Provide correct arguments to formatting methods |
CA2242 | Test for NaN correctly |