Brad Abrams just did a post on the Number of Types in the .NET Framework.
Here are the results I obtained with NDepend (slightly higher):
#assemblies: 119
#namespaces: 933 (here there are some duplication across assemblies, i.e the namespace System for example will be counted as 21 because it is defined in 21 assemblies)
#types: 39 509
#methods: 384 300
#fields: 240 070
#IL instructions: 8 562 828 (equivalent to around 1.7M lines of C# or VB.NET code, it took 6mn to analyze on a quad 64 bits 4GB machine)
SELECT METHODS
WHERE NbILInstructions > 0: 341 842
SELECT TYPES
WHERE IsPublic: 16 463
SELECT TYPES WHERE IsClass: 29 345
SELECT TYPES WHERE IsClass AND IsPublic: 12 324
SELECT TYPES WHERE IsStructure: 2 794
SELECT TYPES WHERE IsStructure AND IsPublic: 511
SELECT TYPES WHERE IsEnumeration: 4 506
SELECT TYPES WHERE IsEnumeration AND IsPublic: 1 838
SELECT TYPES WHERE IsDelegate: 1 312
SELECT TYPES WHERE IsDelegate AND IsPublic: 690
SELECT TYPES WHERE IsInterface: 2 864
SELECT TYPES WHERE IsInterface AND IsPublic: 1 790
SELECT TYPES WHERE IsClass AND IsAbstract: 1 813
SELECT TYPES WHERE IsClass AND IsAbstract AND IsPublic: 1 008
SELECT TYPES WHERE DeriveFrom “System.Exception”: 633 (DeriveFrom means derives directly and indirectly)
SELECT TYPES WHERE DeriveFrom “System.Attribute”: 728
SELECT METHODS
WHERE IsPublic: 212 234
SELECT METHODS WHERE IsPublic AND IsStatic: 29 664
SELECT FIELDS WHERE !IsStatic: 103 349
SELECT FIELDS WHERE IsStatic AND !IsEnumValue AND !IsLiteral AND !IsGeneratedByCompiler: 22 783
Here is a treemap view of the entire .NET framework, the size of the rectangle being proportional to the number of ILinstruction:
Here is a dependency matrix between the 119 assemblies of the .NET framework (click on it to get a bigger view). A blue cell means a dependency from the assembly in x-coordinate/absissa to the assembly in y-coordinate/ordinate.A red square means that there are some cycling dependencies between assemblies. The last row being full blue represent the fact that mscorlib is used by all other assemblies. In the same spirit, low-level assemblies are down in the matrix and are represented with a lots of blue cells (because they are heavily used). High level assemblies are upper in the matrix.
On the big matrix, the green square are symmetrical to blue square, in other words a IsUsing relation has a symmetrical IsUsedBy relation.
The weight printed on the blue cells is the number of members of the assembly used that are used by the assembly user.
The weight printed on the green cells is the number of members of the assembly user that are using something of the assembly used.
