我在几个站点上搜索以了解.NET中的metadata
及其含义。
我还是C#WPF桌面应用程序编程的新手。早在我进行网络编程时,HTML代码中就有元标记,我们在其中用标题,关键字等描述网站。 .NET应用程序中是否也相似?我读了维基,然后用谷歌搜索,但我得到的只是概念上的解释。
一种描述"metadata is data that describes the state of the assembly and a detailed description of each type, attribute within the assembly"
。元数据是一个概念还是某种物理的东西,就像我在某处键入以描述我的代码的代码行一样?如果是这样,我的推荐会成为我的元数据吗?
我读到的元数据是"Within the Common Language Runtime (CLR)"
,但是我只在C#中编码,如何在CLR中将代码编码到元数据中?元数据在CLR中值得推荐吗?我该如何更改。
MSDN写道,元数据是二进制信息,用于另一种语言的软件组件。我虽然只有人需要用英语描述(推荐)才能理解代码块的功能。软件组件仅执行我们编写的任何语句-需要“二进制”信息。编译器如何理解我的高级代码的含义,以生成“程序集描述” ?如果我编写了一个转换货币的程序,那么知道该程序正在转换货币的情况下,元数据会自动生成吗?这个情报在哪里?
我完全感到困惑。
最佳答案
由于其他人已经提供了很好的解释性答案,因此我将仅提及如何自己查看元数据。
在您的Microsoft SDK目录(C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools的最可能的变体)中,有一个名为ildasm.exe
的程序-这是一个简单的反汇编程序,可让您查看已编译的.NET二进制文件。
您可以构建非常简单的控制台应用程序,并使用ildasm.exe
查看已编译的内容。
查看/元信息/显示!命令(或简单地按Ctrl + M)将显示元数据-您可以检查它们的外观。从应用程序打印Hello
到控制台的部分元数据:
TypeDef #1 (02000002)
-------------------------------------------------------
TypDefName: Program (02000002)
Flags : [Public] [AutoLayout] [Class] [AnsiClass] [BeforeFieldInit](00100001)
Extends : 01000001 [TypeRef] System.Object
Method #1 (06000001) [ENTRYPOINT]
-------------------------------------------------------
MethodName: Main (06000001)
Flags : [Public] [Static] [HideBySig] [ReuseSlot] (00000096)
RVA : 0x00002050
ImplFlags : [IL] [Managed] (00000000)
CallCnvntn: [DEFAULT]
ReturnType: Void
1 Arguments
Argument #1: SZArray String
1 Parameters
(1) ParamToken : (08000001) Name : args flags: [none] (00000000)
在这里,您可以看到类型定义(
Program
)及其方法之一(Main
),该方法接受单个输入参数并返回void。自然,这只是元数据的一部分,即使对于最简单的程序,也还有很多。关于c# - .NET中的元数据是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8861065/