.net NET中的类数?

.net NET中的类数?,.net,.net,NET中的类总数是多少?那个号码 在.NET 2.0、.NET 3.0和.NET的下载运行时中 3.5 SP1 我们正在写一篇关于应用程序的科学论文 是基于.NET的,目前声明有更多 6000多个班级。但我不确定这是否正确 号码 例如,说明程序集的数量, 名称空间、方法等,但不包括类的数量 测试平台:WindowsXP 64位SP2,8GB内存 更新4:我们的论文已经发表了!我使用9911表示类的数量(参见下面的更新3)。该日志为,标题为:“”。不幸的是,论文的全文不是免费提供的,只有摘要 更

NET中的类总数是多少?那个号码 在.NET 2.0、.NET 3.0和.NET的下载运行时中 3.5 SP1

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

例如,说明程序集的数量, 名称空间、方法等,但不包括类的数量

测试平台:WindowsXP 64位SP2,8GB内存


更新4:我们的论文已经发表了!我使用9911表示类的数量(参见下面的更新3)。该日志为,标题为:“”。不幸的是,论文的全文不是免费提供的,只有摘要

更新3:我想我现在已经非常接近一个解决方案:9911个.NET3.5SP1的公共类。在更新1上扩展,我使函数递归并扩展它,以便报告任何子文件夹及其子文件夹的类型、类和公共类的数量。 在C:\WINDOWS\Microsoft.NET上运行此操作 给出了40414种类型,仅为中数字的0.2%。 -HTML源代码是选项卡分隔的,因此可以导入到 电子表格,例如。 以下是公共课程的细分:

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:我尝试使用 lextm和它给出的.NET2.0(89个DLL)的数字增加了10% 在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727中:5855 上课。这是在一个不同的系统上,而不是在 编程解决方案(见下文)

程序:

  • 下载NDepend(NDepend_2_12_1_3122.zip), 通过

  • 用7-Zip解压

  • 运行VisualNDepend.exe

  • 菜单文件/选择要分析的.NET程序集/ //好的

  • 按“创建查询”(右下)并键入/粘贴:

    从程序集“可访问性”、“cscompmgd”、“CustomMarshallers”、“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.Install”、“System.Data”、“System.Data.OracleClient”、“System.Data.SqlXml”、“System.Deployment”、“System“系统.设计”,“系统.目录服务”,“系统.目录服务.协议”,“系统.绘图”,“系统.绘图.设计”,“系统.企业服务”,“系统.管理”,“系统.消息传递”,“系统.运行时.远程处理”,“系统.运行时.序列化.格式化程序.Soap”,“系统.安全性”,“系统.服务过程”,“系统.事务”,“系统.Web”“,”System.Web.Mobile“,”System.Web.RegularExpressions“,”System.Web.Services“,”System.Windows.Forms“,”System.XML“其中IsPublic和IsClass


  • 更新1:根据Jon Skeet的回答,我开发了一个 功能(如下所列)。初步结果是5265 公共类,共12626类,.NET的18317类 2.0. mscorlib.dll中的802个公共类和678个公共类 类从System.dll中删除。这是来自89个DLL文件,其中 40与Assembly.LoadFrom()一起失败。但我不确定我是否 在正确的地方测量正确的东西

    电话:

    功能:

    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()
    

    该页面给出了类型的数量(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();
    

    根据您对私有和内部代码以及枚举、结构和接口的计数方式,数量可能会有很大的不同。还有迭代器块、匿名类和闭包,它们可能会导致创建相当多的编译器生成的类,因此查看非公共类可能没有什么意义。然后可能会有各种机器生成的类,它们使用像T4这样的技术,通常封装非常相似的行为,但最终形成不同的类。通过工厂方法工作的Api可以隐藏一组相关类,主要只公开接口——一个接口可能没有公共实现者,但仍然可用。总而言之,测量起来很棘手…我建议使用Assembly.ReflectionOnlyLoadFrom而不是Assembly.LoadFrom,只是为了提高速度。我现在尝试使用Assembly.ReflectionOnlyLoadFrom。结果不同:1785个公共课。这可能是因为68次故障(而不是40次)。mscorlib.dll和System.dll不会失败,并提供相同数量的公共类。更新注意4:论文全文可能在上有,但我只是在工作中测试过。这对你们中的任何人有效吗?否则,可以在ACS注册(作为“非成员/全局合作伙伴”),登录并打开上面的页面。程序集列表是否来自C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727中的89个DLL文件?(对于我的系统上的.NET2.0)可能是-对于.NET2.0。似乎每一个版本都会改变。“Reference Assemblies”目录很有希望,但对于遗漏了mscorlib.dll和System.dll的v3.5…我得到了5265个.NET 2.0公共类的结果-我在问题中添加了一个代码列表。明天我将尝试使用.NET3.5SP1。对于.NET2.0:5265个公共类(29%),总共12626个类(69%),18317种类型。如果29%是.NET 3.5 SP1中的公共类,那么.NET 3.5 SP1中的公共类数量是0.29 x 40513=11749。我认为实际数量明显低于之前的估计:9911个公共类
    int classes = assemblies.GetTypes()
                            .Where(t => t.IsClass && t.IsPublic)
                            .Count();