Metadane

fones

Metadane

Do każdego podzespołu ([[C_sharp/assembly]]) kompilator dołącza dodatkowe dane. Obok Mianifestu ( patrz. [[C_sharp/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 [[C_sharp/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

```csharp =========================================================== 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.

0 komentarzy