.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 类。这是一个不同的系统 程序化解决方案(见下文)。
步骤:
下载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> /<全部选择> /确定。
按“创建查询”(右下角)并输入/粘贴:
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
更新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()
答案 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();