gpt4 book ai didi

.net - .NET 中的类数?

转载 作者:行者123 更新时间:2023-12-03 20:35:11 26 4
gpt4 key购买 nike

.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 公共(public)类。在更新 1 上进行扩展,我使函数递归并对其进行了扩展,以便为任何子文件夹及其子文件夹报告类型、类和公共(public)类的数量。
在 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
类。这是在不同的系统上,而不是
程序化解决方案(见下文)。

程序:
  • 下载 NDepend (NDepend_2_12_1_3122.zip),
    通过http://www.ndepend.com/NDependDownload.aspx
  • 使用 7-Zip 解压
  • 运行 VisualNDepend.exe
  • 菜单文件/选择要分析的 .NET 程序集/
    <选择了 89 个 DLL 文件
    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>/<全选>/确定。
  • 按“创建查询”(右下角)并输入/粘贴:

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


  • 更新 1 :根据 Jon Skeet 的回答,我开发了一个
    功能(如下所列)。初步结果为 5265
    公共(public)类,共12626个类,.NET的18317个类型
    2.0。来自 mscorlib.dll 的 802 个公共(public)类和 678 个公共(public)类
    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()

    最佳答案

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

    我希望这 40K+ 中的绝大多数都是类(class),所以你的 6000 数字非常保守。

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

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

    这假设您想要所有类(class) - 您实际上只对公共(public)类(class)感兴趣吗?
    int classes = assemblies.GetTypes()
    .Where(t => t.IsClass && t.IsPublic)
    .Count();

    关于.net - .NET 中的类数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1406996/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com