.NET中的类数?

时间:2009-09-10 18:42:42

标签: .net

.NET中的类总数是多少?这个数字 是在下载的.NET 2.0,.NET 3.0和.NET运行时 3.5 SP1。

我们正在写一篇关于应用程序的科学论文 是基于.NET,目前声明还有更多 超过6000班。但我不确定这是否正确 号。

例如this page表示程序集的数量, 名称空间,方法等,但不是类的数量。

测试平台:Windows XP 64位SP2,8 GB RAM。


更新4 :我们的论文已发布!我使用9911作为课程数量(见下面的更新3)。期刊为Journal of Proteome Research,标题为:“MSQuant, an Open Source Platform for Mass Spectrometry-Based Quantitative Proteomics”。不幸的是,论文的全文不是免费提供的,只是摘要。

更新3 :我认为我现在已经非常接近解决方案:用于.NET 3.5 SP1的9911公共类。在更新1上进行扩展,我已经使函数递归并对其进行了扩展,因此报告了任何子文件夹及其子文件夹的类型,类和公共类的数量。 在C:\ WINDOWS \ Microsoft.NET上运行它 给出40414类型,仅referenced article中的数字为0.2%。 Full transcript - HTML源是制表符分隔的,因此可以将其导入 电子表格,例如OpenOffice Calc。 以下是公共课程的细分:

Framework:

  Total: 6025

    v1.1.4322
      0

    v2.0.50727
      5265

    v3.0
      641

    v3.5
      119

Framework64:

  Total: 3886

    v2.0.50727
      3126  

    v3.0
      641

    v3.5
      119

更新2 :我尝试使用NDepend和CQL建议 lextm,它为.NET 2.0提供了10%的数字(89个DLL 在C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727):5855 类。这是一个不同的系统 程序化解决方案(见下文)。

步骤:

  1. 下载NDepend(NDepend_2_12_1_3122.zip), 通过http://www.ndepend.com/NDependDownload.aspx

  2. 使用7-Zip

  3. 解压缩
  4. 运行VisualNDepend.exe

  5. 菜单文件/选择要分析的.NET程序集/ <选择了89个DLL文件 C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727> /<全部选择> /确定。

  6. 按“创建查询”(右下角)并输入/粘贴:

    SELECT ASSPES FROM ASSEMBLIES“Accessibility”,“cscompmgd”,“CustomMarshalers”,“IEExecRemote”,“IEHost”,“IIEHost”,“ISymWrapper”,“Microsoft.Build.Engine”,“Microsoft.Build.Framework” ,“Microsoft.Build.Tasks”,“Microsoft.Build.Utilities”,“Microsoft.JScript”,“Microsoft.VisualBasic”,“Microsoft.VisualBasic.Compatibility”,“Microsoft.VisualBasic.Compatibility.Data”,“Microsoft。 VisualBasic.Vsa“,”Microsoft.VisualC“,”Microsoft.Vsa“,”Microsoft.Vsa.Vb.CodeDOMProcessor“,”Microsoft_VsaVb“,”mscorlib“,”sysglobl“,”System“,”System.configuration“,” System.Configuration.Install“,”System.Data“,”System.Data.OracleClient“,”System.Data.SqlXml“,”System.Deployment“,”System.Design“,”System.DirectoryServices“,”System。 DirectoryServices.Protocols“,”System.Drawing“,”System.Drawing.Design“,”System.EnterpriseServices“,”System.Management“,”System.Messaging“,”System.Runtime.Remoting“,”System.Runtime。 Serialization.Formatters.Soap“,”System.Security“,”System.ServiceProcess“,”System.Transa ctions“,”System.Web“,”System.Web.Mobile“,”System.Web.RegularExpressions“,”System.Web.Services“,”System.Windows.Forms“,”System.XML“WHERE IsPublic AND IsClass


  7. 更新1 :根据Jon Skeet的回答,我开发了一个 功能(如下所列)。初步结果是5265 公共类,总共12626个类,.NET的18317个类 2.0。来自mscorlib.dll和678 public的802个公共类 来自System.dll的类。这是来自89个DLL文件 40使用Assembly.LoadFrom()失败。但我不确定 衡量正确的事情或在正确的地方。

    呼叫:

    DotNetClassCount("C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727")
    

    功能:

    Imports System.Reflection 'For Assembly
    Imports System.IO 'For Path
    
    Private Function DotNetClassCount(ByRef aBaseDirectory As String) _
      As Integer
    
        Dim classCount As Integer = 0
    
        Dim failCount As Integer = 0 'For statistics only.
    
        Dim folderItems As String() = Directory.GetFiles(aBaseDirectory)
        Dim someFolderItem As String
        For Each someFolderItem In folderItems
    
            Dim fileName As String = Path.GetFileName(someFolderItem)
    
            If Path.GetExtension(fileName) = ".dll" Then
                Try
                    Dim asm3 As Assembly = _
                      Assembly.LoadFrom(someFolderItem)
                    Dim types As System.Type() = asm3.GetTypes()
    
                    Dim DLLclassCount As Integer = 0
                    Dim someType As System.Type
                    For Each someType In types
                        If someType.IsClass AndAlso someType.IsPublic Then
                            DLLclassCount += 1
                        End If
                    Next
                    classCount += DLLclassCount
                Catch ex As Exception
                    'Fail silently...
                    failCount += 1
                End Try
            End If
        Next
        Return classCount
    End Function 'DotNetClassCount()
    

1 个答案:

答案 0 :(得分:17)

该页面给出了类型的数量(3.5SP1中的40513) - 区分类和结构/枚举/接口是否真的很重要?

我希望那些40K +的绝大多数都是上课,所以你的6000数字非常保守。

给定一个程序集列表,可以很容易地计算出类的数量:

int classes = assemblies.GetTypes()
                        .Where(t => t.IsClass)
                        .Count();

这假设你想要所有课程 - 你真的只对公共课感兴趣吗?

int classes = assemblies.GetTypes()
                        .Where(t => t.IsClass && t.IsPublic)
                        .Count();