c# - .NET 中的元数据是什么?

标签 c# .net metadata

我在几个网站上进行了搜索,以了解 .NET 中的 metadata 及其含义。

我对 C# WPF 桌面应用程序编程还是个新手。当我在进行网络编程时,HTML 代码中有元标记,我们用标题、关键字等来描述网站。在 .NET 应用程序中也类似吗?我阅读了维基百科并进行了谷歌搜索,但我得到的只是概念性解释。

一个描述“元数据是描述程序集状态的数据以及程序集中每种类型、属性的详细描述”。元数据只是一个概念还是物理上的东西,比如我在某处输入的代码行来描述我的代码?如果是这样,我的表扬会成为我的元数据吗?

我读到的元数据是 “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 查看编译后的内容。 View/MetaInfo/Show! 命令(或简单地 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/

相关文章:

c# - 泛型如何影响 C# 和 .NET 的设计?

.net - WCF WebGetAttribute 与 WebInvokeAttribute

metadata - 提交应用以供审核后,我还可以修改和更新应用的元数据吗?

c# - 数据驱动的 MSTest : DataRow is always null

c# - ASP.Net 实时流式传输 IP 摄像机视频和音频

c# - 如何在 .NET C# 中获取 CefSharp DevTools 元素选择器的输出?

android - 如何使用 GCM 向多个用户发送推送通知

c# - 在服务器端c#读取grpc中的元数据

php - 在管理订单中显示 Woocommerce 自定义结账字段值,使其可编辑

C# 异步等待死锁问题在 .NetCore 中消失了吗?