C#

Metadane

fones

Metadane

Do każdego podzespołu (assembly) kompilator dołącza dodatkowe dane. Obok Mianifestu ( patrz. Manifest ) generuje także Metadane, na które składają sie tabele definicji i referencji.

Tabele Definicji zawierają kompletny opis typów stosowanych w kodzie aplikacji w języku pośrednim MSIL, tj. definicje typów, pól, metod, właściwości, parametrów.
Tabele Referencji zwierają odwołania do typów znajdujących sie w innych zestawach.
Metadane potrzebne są kompilatorowi JIT (Just-In-Time) podczas konwertowania kodu IL na rdzenny kod maszynowy danej architektury.

Przeglądanie

Metadane można przeglądać za pomocą narzędzia ILDasm. Po wybraniu odpowiedniego programu, należy (w starszych wersjach ILDasm) z menu File wybrać Dump Metainfo, lub (w nowszych) View->MetaInfo->Show.

Przykładowe Metadane

===========================================================
ScopeName : Lista.exe
MVID      : {C4FFCBE8-372D-41D6-8E1D-0486937DAB2B}
===========================================================
Global functions
-------------------------------------------------------
Global fields
-------------------------------------------------------
Global MemberRefs
-------------------------------------------------------
TypeDef #1 (02000002)
-------------------------------------------------------
    TypDefName: Lista.Employee  (02000002)
    Flags     : [Public] [AutoLayout] [Class] [AnsiClass] [BeforeFieldInit]  (00100001)
    Extends   : 01000001 [TypeRef] System.Object
    Field #1 (04000001)
    -------------------------------------------------------
        Field Name: empID (04000001)
        Flags     : [Private]  (00000001)
        CallCnvntn: [FIELD]
// [...]
TypeRef #1 (01000001)
-------------------------------------------------------
Token:             0x01000001
ResolutionScope:   0x23000001
TypeRefName:       System.Object
    MemberRef #1 (0a000010)
    -------------------------------------------------------
        Member: (0a000010) .ctor: 
        CallCnvntn: [DEFAULT]
        hasThis 
        ReturnType: Void
        No arguments.
// [...]
TypeSpec #1 (1b000001)
-------------------------------------------------------
    TypeSpec : GenericInst Class System.Collections.Generic.List`1< Class Lista.Employee>
    MemberRef #1 (0a000012)
    -------------------------------------------------------
        Member: (0a000012) .ctor: 
        CallCnvntn: [DEFAULT]
        hasThis 
        ReturnType: Void
        No arguments.
Signature #1 (0x11000001)
-------------------------------------------------------
        CallCnvntn: [LOCALSIG]
        1 Arguments
            Argument #1:  String
            // [...]
Assembly
-------------------------------------------------------
    Token: 0x20000001
    Name : Lista
    Public Key    :
    Hash Algorithm : 0x00008004
    // [...]
    CustomAttribute #1 (0c000001)
    -------------------------------------------------------
        CustomAttribute Type: 0a000001
        CustomAttributeName: System.Reflection.AssemblyFileVersionAttribute :: instance void .ctor(class System.String)
        Length: 12
        Value : 01 00 07 31 2e 30 2e 30  2e 30 00 00             >   1.0.0.0      <
        ctor args: ("1.0.0.0")
        // [...]
AssemblyRef #1 (23000001)
-------------------------------------------------------
    Token: 0x23000001
    Public Key or Token: b7 7a 5c 56 19 34 e0 89 
    Name: mscorlib
    Version: 2.0.0.0
    // [...]
    Locale: <null>
    HashValue Blob:
    Flags: [none] (00000000)
User Strings
-------------------------------------------------------
70000001 : ( 4) L"{0}\n"

Wyjaśnienia niektórych nazwa:

  • TypRef - definicja typu referencyjnego
  • TypDef - definicja typu zwykłego
  • TypSpec - definicja typów specjalnych, takich jak kolekcje, typy generyczne.
  • Assembly - definicja podzespołu
  • AssembyRef - referencja do innego podzespołu.
  • User Strings - stałe wartosći wprowadzone przez programiaste w kodzie.
C#

0 komentarzy