web-dev-qa-db-fra.com

Qu'est-ce que les métadonnées dans .NET?

J'ai googlé plusieurs sites pour comprendre ce que metadata est dans .NET et cela signifie.

Je suis encore nouveau dans la programmation d'applications de bureau C # WPF. À l'époque où j'étais en programmation Web, il existe des balises META dans le code HTML où nous décrivons le site avec des titres, des mots clés et autres. Est également similaire dans l'application .NET? J'ai lu le wiki et googlé mais tout ce que je reçois est une explication conceptuelle.

L'un décrit "metadata is data that describes the state of the Assembly and a detailed description of each type, attribute within the Assembly". Les métadonnées sont-elles simplement un concept ou quelque chose de physique comme une ligne de codes que j'ai tapé quelque part pour décrire mon code? Si oui, mon éloge devient-il mes métadonnées?

Je lis que les métadonnées sont "Within the Common Language Runtime (CLR)", mais je code uniquement en C #, comment puis-je coder en CLR dans les métadonnées? Les métadonnées sont-elles recommandables dans CLR? Comment puis-je le changer.

MSDN a écrit que les métadonnées sont des informations binaires pour le composant logiciel d'une autre langue pour les comprendre . Je pensais que seule la description des besoins humains (éloge) en anglais pour comprendre ce qu'un bloc de code fait. Le composant logiciel exécute simplement la déclaration que nous avons écrite - quel est le besoin des informations "binaires". Comment le compilateur peut-il comprendre la signification de mon code de haut niveau pour générer "Description de l'assemblage" ? Si j'écris un programme qui convertit des devises, les métadonnées sont-elles générées automatiquement sachant que le programme convertit des devises? Où est cette intelligence?

Je suis complètement confus.

37
KMC

Étant donné que d'autres ont déjà fourni d'excellentes réponses explicatives, je mentionnerai simplement comment vous pouvez afficher les métadonnées vous-même.

Dans votre répertoire Microsoft SDK (les variantes les plus probables de C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools) il y a un programme appelé ildasm.exe - c'est un simple désassembleur qui vous permet de visualiser les binaires .NET compilés.

Vous pouvez créer une application console très simple et utiliser ildasm.exe pour afficher le contenu compilé. View/MetaInfo/Show! (ou simplement Ctrl + M) affichera les métadonnées - vous pouvez vérifier à quoi elles ressemblent. Partie des métadonnées de l'impression de l'application Hello à la console:

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)

Ici, vous pouvez voir la définition du type (Program) et l'une de ses méthodes (Main), qui prend un argument d'entrée unique et renvoie void. Ceci n'est naturellement qu'une partie des métadonnées, même pour les programmes les plus simples, il y en a beaucoup plus.

20
k.m

Si vous connaissez .NET Reflection, vous pouvez considérer les métadonnées comme "les données auxquelles Reflection accède". Chaque assemblage .NET stocke des informations sur les types et les méthodes qu'il contient, les attributs de ces méthodes, etc. Il n'aurait pas besoin de les stocker juste pour exécuter le code (les EXE natifs n'ont pas ce genre d'informations), mais il en a besoin à d'autres fins, comme l'application de la sécurité déclarative et l'activation de Reflection.

Les métadonnées sont donc "quelque chose de physique", mais la plupart sont générées automatiquement à partir du code que vous écrivez. L'ajout d'attributs à vos classes ou méthodes est probablement le seul moyen de modifier directement les métadonnées. En particulier, vos commentaires de code source ne seront pas stockés dans l'assembly en tant que métadonnées (ou de toute autre manière).

La page Wikipedia à ce sujet est assez bonne: http://en.wikipedia.org/wiki/.NET_metadata

Edit: Non, les métadonnées ne sont pas comme des commentaires. Il s'agit simplement de "données sur le code", qui ne font pas partie du code lui-même (non nécessaires pour exécuter le programme). Ce n'est pas du tout comme les métadonnées HTML. Un exemple de métadonnées est le fait que l'assembly contient une classe nommée "MyClass" et que cette classe contient une méthode nommée "DoSomething" avec certains paramètres, etc.

16
EMP

Cet article est un excellent et complet sur les métadonnées dans dot net. Jetez un coup d'oeil. J'espère que cela clarifiera beaucoup de choses. Il a un lien vers une page expliquant comment les métadonnées sont utilisées lors de l'exécution .

Réflexion dans dot net est un concept très puissant et il est basé sur lecture des métadonnées stocké avec le code réel.

11
Haris Hasan

Simplement, les métadonnées sont des informations stockées sur votre programme que vous pouvez examiner par un certain nombre de moyens: dans .NET, l'une de ces méthodes est communément appelée réflexion

Les métadonnées décrivent les types (par exemple, classes, interfaces, ...), les méthodes et paramètres (noms et types) et les attributs qui ont été appliqués. Vous pouvez utiliser ces informations de plusieurs façons, par exemple des systèmes de test tels que nunit et msstest (entre autres) utilisent les métadonnées pour "découvrir" les tests au sein d'un assembly; les métadonnées peuvent également être utilisées dans la liaison de données.

Il y a tellement de façons de l'utiliser - ils ont même des livres dessus (enfin des sections au moins http://my.safaribooksonline.com/book/programming/csharp/9781449379629/reflection-and-metadata/729 )

4
Shaun Wilde

ne compliquez pas les choses, c'est juste --- Données (informations) sur les données.

il suffit de penser à la balise Meta en HTML, elle contient des informations sur la page, le mot-clé, l'auteur, la dernière modification. cela signifie qu'il contient des informations sur une donnée qui est votre page html.

Lorsque nous parlons en termes de C #, les métadonnées sont stockées dans une section d'un fichier exécutable portable (PE) .NET Framework, tandis que le langage intermédiaire Microsoft (MSIL) est stocké dans une autre section du fichier PE. La partie métadonnées du fichier contient une série de structures de données de table et de tas. La partie MSIL contient MSIL et les jetons de métadonnées qui font référence à la partie métadonnées du fichier PE. Chaque table de métadonnées contient des informations sur les éléments de votre programme. Par exemple, une table de métadonnées décrit les classes de votre code, une autre table décrit les champs, etc. Si vous avez dix classes dans votre code, la table des classes aura des dizaines de lignes, une pour chaque classe. Les tables de métadonnées font référence à d'autres tables et tas. Par exemple, la table de métadonnées pour les classes fait référence à la table des méthodes. Les métadonnées stockent également des informations dans quatre structures de tas: chaîne, objet blob, chaîne utilisateur et GUID. Toutes les chaînes utilisées pour nommer les types et les membres sont stockées dans le tas de chaînes. Par exemple, une table de méthodes ne stocke pas directement le nom d'une méthode particulière, mais pointe vers le nom de la méthode stocké dans le tas de chaînes.

si cela vous intéresse, reportez-vous -- https://msdn.Microsoft.com/en-us/library/xcd8txaw%28v=vs.110%29.aspx

3
Reeves