2012-01-14 16 views
29

मैंने यह समझने के लिए कई साइटों को गुमराह किया कि metadata .NET में है और इसका मतलब है।.NET में मेटाडेटा क्या है?

मैं अभी भी सी # डब्ल्यूपीएफ डेस्कटॉप एप्लिकेशन प्रोग्रामिंग के लिए नया हूं। जब मैं वेब प्रोग्रामिंग था, तब एचटीएमएल कोड में मेटा टैग है जहां हम शीर्षक, कीवर्ड और इस तरह की साइट का वर्णन करते हैं। .NET अनुप्रयोग में भी समान है? मैंने विकी पढ़ी, और गुगल हो गया लेकिन मुझे जो भी मिला वह अवधारणात्मक स्पष्टीकरण है।

एक "metadata is data that describes the state of the assembly and a detailed description of each type, attribute within the assembly" का वर्णन करता है। क्या मेटाडाटा सिर्फ एक अवधारणा या कुछ कोड है जो कोड के लाइन की तरह है जो मैंने अपने कोड का वर्णन करने के लिए कहीं और टाइप किया है? यदि हां, तो मेरी प्रशंसा मेरी मेटाडेटा बन जाती है?

मैंने पढ़ा मेटाडाटा "Within the Common Language Runtime (CLR)" है, लेकिन मैं केवल सी # में कोड, मैं मेटाडेटा में सीएलआर में कोड कैसे कर सकता हूं? मेटाडाटा सीएलआर में सराहना करता है? मैं इसे बदलने में किस तरह सक्षम हूं।

MSDN ने लिखा है कि मेटाडाटा समझने के लिए किसी अन्य भाषा के सॉफ़्टवेयर घटक के लिए बाइनरी जानकारी है। हालांकि मुझे समझने के लिए अंग्रेजी में केवल मानव जरूरतों का वर्णन (प्रशंसा) है कि कोड का एक ब्लॉक क्या करता है। सॉफ्टवेयर घटक बस जो भी कथन हमने लिखा है उसे निष्पादित करता है - "बाइनरी" जानकारी की क्या आवश्यकता है। "असेंबली का विवरण" उत्पन्न करने के लिए संकलक मेरे उच्च स्तरीय कोड के अर्थ को कैसे समझ सकता है? यदि मैं एक प्रोग्राम लिखता हूं जो मुद्रा को परिवर्तित करता है, तो प्रोग्राम को जानकर मेटाडेटा ऑटो-जेनरेट किया गया मुद्रा मुद्रा परिवर्तित कर रहा है? यह बुद्धि कहाँ है?

मैं पूरी तरह उलझन में हूं।

उत्तर

15

है के बाद से अन्य लोगों को पहले से ही महान व्याख्यात्मक जवाब प्रदान की है, मैं तो बस आप मेटाडाटा अपने आप को कैसे देख सकते हैं उल्लेख करेंगे।

अपने Microsoft एसडीके निर्देशिका में (सी की सबसे अधिक संभावना विविधताओं: \ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ बिन \ NETFX 4.0 उपकरण) वहाँ बुलाया कार्यक्रम ildasm.exe है - यह सरल disassembler आप देखने की अनुमति देता है कि संकलित .NET बाइनरी।

आप संकलित सामग्री देखने के लिए बहुत सरल कंसोल एप्लिकेशन बना सकते हैं और ildasm.exe का उपयोग कर सकते हैं। देखें/मेटाइन्फो/शो! कमांड (या बस 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) है, जो एक इनपुट तर्क लेता है और शून्य रिटर्न देख सकते हैं। यह स्वाभाविक रूप से केवल मेटाडाटा का हिस्सा है, यहां तक ​​कि सबसे सरल कार्यक्रमों के लिए भी बहुत कुछ है।

+1

+1 मुझे इसे अपने उत्तर के रूप में लेना है क्योंकि यह अन्य उत्तरों को पढ़ने और समझने में मेरी समझ को समझता है। – KMC

14

यदि आप .NET प्रतिबिंब से परिचित हैं तो आप मेटाडेटा को "प्रतिबिंबित डेटा" के रूप में सोच सकते हैं। प्रत्येक .NET असेंबली में किस तरह के तरीकों और विधियों के बारे में जानकारी है, उन तरीकों पर विशेषताओं, आदि। इसे केवल कोड चलाने के लिए स्टोर करने की आवश्यकता नहीं होगी (मूल EXEs की उस तरह की जानकारी नहीं है), लेकिन यह इसे अन्य उद्देश्यों के लिए जरूरी है, जैसे घोषणात्मक सुरक्षा लागू करना और प्रतिबिंब सक्षम करना।

तो मेटाडाटा "कुछ भौतिक" है, लेकिन इसमें से अधिकांश आपके द्वारा लिखे गए कोड से स्वचालित रूप से जेनरेट किया जाता है। अपनी कक्षाओं या विधियों में विशेषताओं को जोड़ना शायद एकमात्र तरीका है जिससे आप सीधे मेटाडेटा बदल सकते हैं। विशेष रूप से, आपकी स्रोत कोड टिप्पणियां असेंबली में मेटाडेटा (या किसी अन्य तरीके से) के रूप में संग्रहीत नहीं की जाएंगी।

इस पर

विकिपीडिया पृष्ठ बहुत अच्छी है: http://en.wikipedia.org/wiki/.NET_metadata

संपादित करें: नहीं, मेटाडाटा टिप्पणी पसंद नहीं है। यह बस "कोड के बारे में डेटा" है, जो कोड का हिस्सा नहीं है (प्रोग्राम चलाने के लिए आवश्यक नहीं है)। यह HTML मेटाडेटा की तरह नहीं है। मेटाडेटा का एक उदाहरण यह तथ्य है कि असेंबली में "माईक्लास" नामक एक कक्षा होती है और उस वर्ग में कुछ पैरामीटर आदि के साथ "DoSomething" नामक एक विधि होती है। इसलिए यह रहस्यमय नहीं है - केवल "स्पष्ट" सामान मुख्य रूप से।

+0

मैं विकी पढ़ा है, और मैं उलझन में हूँ। मेटाडाटा को मेरे कोड का वर्णन करने की इच्छा है? कंप्यूटर मेरे उद्देश्य को कैसे समझ सकता है और इसे मेरे लिए उत्पन्न कर सकता है? एचटीएमएल में पेज का वर्णन करने के लिए मेटा टैग मैन्युअल रूप से कीवर्ड और शीर्षक के साथ टाइप किए जाते हैं, ब्राउज़र पेज सामग्री को समझने और मेरे लिए कीवर्ड और शीर्षक उत्पन्न करने के लिए पर्याप्त बुद्धिमान नहीं होगा? आदमी मैं सब उलझन में हूँ .. – KMC

+0

इसलिए मेटाडाटा वर्ग, विधियों, चर आदि के लिए पहचानकर्ताओं को कैप्चर करता है। इसका क्या मतलब है? पहचानकर्ता नाम = मेरे डेटा का वर्णन कर रहा है? हालांकि मैं विधि हस्ताक्षर भी एक विधि में जानकारी को जोड़ता हूं .. थोड़ा, और भी उलझन में। माफ़ कीजिये। कृपया – KMC

+0

सहायता करें, विधि हस्ताक्षर मेटाडेटा का हिस्सा है। विधि को कॉल करने के लिए विधि के बाइनरी ऑफसेट और इसकी संख्या और पैरामीटर के आकार को जानने के लिए पर्याप्त होगा। हालांकि, .NET पूर्ण हस्ताक्षर संग्रहीत करता है: विधि का नाम, वापसी प्रकार, प्रत्येक पैरामीटर का सटीक प्रकार और नाम, विधि या पैरामीटर आदि पर कोई विशेषताओं, यह मेटाडेटा है। इसका मुद्दा प्रतिबिंब (और कुछ अन्य चीजों) को सक्षम करना है। – EMP

11

यह is a great and comprehensive डॉट नेट में मेटा डेटा के बारे में आलेख। इस पर एक नज़र मारो। मुझे आशा है कि यह कई चीजों को साफ़ करेगा। इसमें how meta data is used at runtime समझाते हुए एक पृष्ठ से लिंक है।

Reflection डॉट नेट में एक बहुत शक्तिशाली अवधारणा है और यह वास्तविक कोड के साथ reading the metadata पर संग्रहीत है।

4

बस, मेटाडाटा जानकारी है जो आपके प्रोग्राम के बारे में संग्रहीत है जिसे आप कई तरीकों से जांच सकते हैं।नेट इन तरीकों में से एक को आमतौर पर प्रतिबिंब

मेटाडाटा प्रकारों (जैसे वर्ग, इंटरफेस, ...), विधियों और पैरामीटर (नाम और प्रकार) और लागू किए गए गुणों का वर्णन करता है। आप इस जानकारी का कई तरीकों से उपयोग कर सकते हैं उदा। नॉनिट और एमएसस्टेस्ट (दूसरों के बीच) जैसे टेस्ट सिस्टम एक असेंबली के भीतर परीक्षणों को 'खोज' करने के लिए मेटाडेटा का उपयोग करते हैं; अन्य तरीकों से मेटाडेटा का उपयोग किया जा सकता है डाटाबेसिंग में।

वहाँ इसका इस्तेमाल करने के इतने सारे तरीके हैं - वे भी उस पर किताबें (अच्छी तरह से वर्गों में कम से कम http://my.safaribooksonline.com/book/programming/csharp/9781449379629/reflection-and-metadata/729)

+0

यदि मेरे पास "myMethod" विधि है, तो मेटाडाटा इसका वर्णन कैसे करेगा? कंपाइलर नहीं जानता कि विधि का क्या अर्थ है और केवल इसे निष्पादित करता है, मैन्युअल रूप से टाइप किए गए विवरण के अलावा विवरण कैसे उत्पन्न किया जा सकता है? उलझन में। – KMC

+0

बिल्कुल, मेटाडेटा प्रकार के नाम, विधि का नाम, पैरामीटर का नाम, स्थानीय चर का नाम ... –

+1

पर एक नज़र डालें [ILSpy] (http://wiki.sharpdevelop.net/ ILSpy.ashx) आईएल की व्याख्या करने के लिए मेटाडेटा को उपयोग करने के लिए उपयोग किया जा रहा है और "समकक्ष" स्रोत कोड लौटाता है। –

2

डेटा के बारे में डेटा (सूचना) बस जटिल नहीं है।

बस HTML में मेटा टैग के बारे में सोचें, इसमें पृष्ठ, कीवर्ड, लेखक, अंतिम संशोधित जानकारी के बारे में जानकारी है। इसका मतलब है कि यह उस डेटा के बारे में जानकारी रखता है जो आपका HTML पृष्ठ है।

जब हम सी # के संदर्भ में बात करते हैं, मेटाडाटा, एक .NET फ्रेमवर्क पोर्टेबल निष्पादन योग्य (पीई) फ़ाइल के एक हिस्से में जमा हो जाती है, जबकि माइक्रोसॉफ्ट मध्यवर्ती भाषा (MSIL) पीई फ़ाइल के दूसरे खंड में संग्रहीत किया जाता है। फ़ाइल के मेटाडेटा भाग में टेबल और ढेर डेटा संरचनाओं की श्रृंखला शामिल है। एमएसआईएल भाग में एमएसआईएल और मेटाडाटा टोकन शामिल हैं जो पीई फ़ाइल के मेटाडेटा हिस्से का संदर्भ देते हैं। प्रत्येक मेटाडेटा तालिका में आपके प्रोग्राम के तत्वों के बारे में जानकारी होती है। उदाहरण के लिए, एक मेटाडाटा तालिका आपके कोड में कक्षाओं का वर्णन करती है, एक और तालिका फ़ील्ड का वर्णन करती है, और इसी तरह। यदि आपके कोड में दस कक्षाएं हैं, तो कक्षा तालिका में प्रत्येक पंक्ति के लिए दस पंक्तियां होंगी। मेटाडाटा टेबल अन्य तालिकाओं और ढेर का संदर्भ देता है। उदाहरण के लिए, कक्षाओं के लिए मेटाडेटा तालिका विधियों के लिए तालिका का संदर्भ देती है। मेटाडाटा चार ढेर संरचनाओं में जानकारी भी संग्रहीत करता है: स्ट्रिंग, ब्लॉब, उपयोगकर्ता स्ट्रिंग, और GUID। प्रकार और सदस्यों को नाम देने के लिए उपयोग किए जाने वाले सभी तार स्ट्रिंग ढेर में संग्रहीत होते हैं। उदाहरण के लिए, एक विधि तालिका सीधे किसी विशेष विधि का नाम संग्रहीत नहीं करती है, लेकिन स्ट्रिंग ढेर में संग्रहीत विधि के नाम को इंगित करती है।

अगर यह ब्याज बनाता है आप में refer-- https://msdn.microsoft.com/en-us/library/xcd8txaw%28v=vs.110%29.aspx

संबंधित मुद्दे