Programowanie w języku C#

Metadane

  • 2006-07-04 14:20
  • 0 komentarzy
  • 2398 odsłon
  • Oceń ten tekst jako pierwszy

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.