.NET 中的类数量?

2023-12-28

.NET 中的类总数是多少?那个数字 位于下载的 .NET 2.0、.NET 3.0 和 .NET 运行时中 3.5 SP1。

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

例如这一页 http://codebetter.com/blogs/patricksmacchia/archive/2008/08/13/net-3-5-sp1-changes-overview.aspx说明集会的数量, 名称空间、方法等,但不是类的数量。

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


Update 4: 我们的论文发表了!我使用 9911 作为班级数量(请参阅下面的更新 3)。该期刊是蛋白质组研究杂志 http://en.wikipedia.org/wiki/Journal_of_Proteome_Research标题是:“MSQuant,基于质谱的定量蛋白质组学开源平台 http://pubs.acs.org/doi/abs/10.1021/pr900721e”。不幸的是,该论文的全文无法免费获取,只有摘要。

Update 3:我想我现在已经非常接近解决方案了:.NET 3.5 SP1 的 9911 个公共类。在更新 1 的基础上进行扩展,我使该函数成为递归函数并对其进行了扩展,以便报告任何子文件夹及其子文件夹的类型、类和公共类的数量。 在 C:\WINDOWS\Microsoft.NET 上运行 给出 40414 种类型,仅占 0.2%参考文章 http://codebetter.com/blogs/patricksmacchia/archive/2008/08/13/net-3-5-sp1-changes-overview.aspx. 完整成绩单 http://pmortensen.eu/1/until2039-12-31/SO/dorNetAssembliesSummary.html- HTML 源是制表符分隔的,因此可以导入到 电子表格,例如OpenOffice 计算 http://en.wikipedia.org/wiki/OpenOffice.org_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

Update 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 http://www.ndepend.com/NDependDownload.aspx

  2. 使用 7-Zip 解压

  3. 运行 VisualNDepend.exe

  4. 菜单文件/选择要分析的 .NET 程序集/ / / 确定。

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

    从程序集中选择类型“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.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.Transactions”、“System.Web”、“System.Web.Mobile”、“System.Web.RegularExpressions”、“System.Web.Services” "、"System.Windows.Forms"、"System.XML" 其中 IsPublic 和 IsClass


Update 1:根据 Jon Skeet 的回答,我开发了一个 功能(如下所列)。初步结果是5265 公共类,总共12626个类,.NET有18317种类型 2.0。 mscorlib.dll 中的 802 个公共类和 678 个公共类 System.dll 中的类。这是来自 89 个 DLL 文件,其中 40 因 Assembly.LoadFrom() 失败。但我不确定我 测量正确的事物或在正确的位置。

Call:

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

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

我预计这 40K+ 中的绝大多数都是课程,因此您的 6000 数字非常保守。

给定程序集列表,很容易计算出类的数量:

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

这假设你想要all不过,课程 - 你实际上只对公共课程感兴趣吗?

int classes = assemblies.GetTypes()
                        .Where(t => t.IsClass && t.IsPublic)
                        .Count();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 中的类数量? 的相关文章

随机推荐

  • 在VS2005上使用“--layout=system”时Boost链接错误

    我是 boost 新手 我想尝试一下 dll 的一些实际部署场景 因此我使用以下命令来编译 安装库 bjam install layout system variant debug runtime link shared link shar
  • 设置子进程中共享 c_char_p 中字符串的值?

    我有这样的情况 主进程生成一些子进程 它们应该将结果写入字符串和数字类型的共享对象中 对于数字类型没有问题 但对于字符串 值将丢失 import multiprocessing as mp from ctypes import Struct
  • 如何获取项目中所有功能的列表?

    我想以编程方式提取 Google Apps 项目中所有功能的列表 任何服务中似乎都没有一种方法可以轻松提取它们 除非它似乎以某种方式存储在 this 函数中 最好的方法是什么 您想要检索函数列表 您希望使用 Google Apps 脚本来实
  • scipy 成对距离和 X.X+Y.Y - X.Y^t 之间的差异

    假设我们的数据为 d1 np random uniform low 0 high 2 size 3 2 d2 np random uniform low 3 high 5 size 3 2 X np vstack d1 d2 X array
  • “.T”对于 Numpy 数组意味着什么?

    我在 SciPy 文档中看到了这个例子 x y np random multivariate normal mean cov 5000 T 最后的 T 实际上在这里做什么 The T访问属性T对象的 它恰好是一个 NumPy 数组 这T属性
  • 多个新元素的角度交错动画

    我正在尝试在列表中添加交错动画 到目前为止 我已经成功地加载了交错动画 除了加载之外 我还希望在将新项目添加到数组时触发交错动画 我按照这个例子 https medium com google developer experts angul
  • InnoSetup:如何在组件描述中添加换行符

    我正在尝试在组件的描述中间添加换行符 但我似乎找不到合适的语法 Components Name Component A Description This is component A NewLine My component A has t
  • matlab函数sum()的奇怪行为

    知道为什么 Matlab 会这样吗 gt gt sum 0 0 0 Subscript indices must either be real positive integers or logicals gt gt sum 1 1 1 an
  • Xcode Interface Builder - 删除/重命名错误接线的 IBOutlets / IBActions 的“正确”方法?

    我是 Xcode 新手 使用 Swift 工作 所以我不确定我所描述的是否实际上是一个错误 使用界面生成器和助理编辑器时 我可以创建标签 按钮等 并通过按住 Control 键拖动在代码中创建 Outlet 和 Action 只要我是完美的
  • Drools:在数据库中存储规则

    目前 我将所有规则文件存储在文件系统上 它们有很多版本 并在启动时将它们的不同版本加载到内存中 我想更改为将我的 drools 文件存储在数据库中 并且想知道 Drools 是否有任何解决方案或插件可以促进这一点 或者我应该自己制作 Tha
  • 如何在没有 JavaScript 的情况下仅使用内联 CSS 创建工具提示?

    我正在尝试使用内联 CSS 创建悬停工具提示 而不使用 JavaScript 这是我现在的代码 a href hover text span style background color black color white span a
  • 以 JSON 形式提交表单(无 AJAX)

    是否可以在不使用 AJAX 的情况下以 JSON 形式提交表单数据 我尝试更改 enctype
  • Youtube API 返回当前时间

    我正在使用 youtube iframe api 似乎无法在文档或 google 上找到任何引用如何获取当前媒体完成时的返回值的内容 我需要构建一个脚本 可以在其中传递时间变量 其中当变量与当前播放时间匹配时可以触发事件 我知道在嵌入 AP
  • 如何在 R 中导出/导入向量?

    我意识到这是一个非常基本的问题 但我想确保我做得正确 所以我想问只是为了确认 我在一个项目中有一个向量 我希望能够在另一个项目中使用它 我想知道是否有一种简单的方法可以以一种可以轻松将其导入到另一个项目的形式导出该向量 到目前为止 我想出的
  • 从 jquery 通过 AJAX 发送图像数据

    我需要使用 AJAX 将图像数据 data image png base64 从客户端发送到我的 PHP 服务器 我的 AJAX 调用如下所示 表单数据包含图像 ajax url global siteurl save image data
  • 捆绑 git 存储库而不克隆它

    如何捆绑 git 项目而不需要每次都克隆它 现在我总是执行下面的命令 git clone mirror http git project cd git project git bundle create git project lock a
  • selectInput 值未在可反应的 Shiny 中更新(麻烦绑定-unbiding)

    我在 Shiny 的可反应内部有一个 selecInput 但输入没有更新 我想做这样的事情 但可以反应 绑定 取消绑定 DataTable 时出现反应问题 https stackoverflow com questions 3757203
  • 来自 AngularJS 的 Django CORS API

    我已经在 Django 中使用 django cors 启用了 CORS https github com ottoyiu django cors headers https github com ottoyiu django cors h
  • Numpy - 多个外积

    我想知道是否有一种方法可以计算多个外部产品并将结果堆叠在单个操作中 假设我有一个 Nx1 向量并与 1xM 向量进行外积 结果将是一个 NxM 矩阵 如果我有一个 NxR 矩阵 A 和一个 RxM 矩阵 B 会怎么样 是否可以构造一个 Nx
  • .NET 中的类数量?

    NET 中的类总数是多少 那个数字 位于下载的 NET 2 0 NET 3 0 和 NET 运行时中 3 5 SP1 我们正在写一篇关于应用程序的科学论文 基于 NET 目前声明还有更多 超过6000个班级 但我不确定这是否正确 数字 例如