我在几个站点上搜索以了解.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/

10-13 05:32