2012-05-02 15 views
5

मैंने देखा है कि सबसे अधिक (सभी?) .winmd फ़ाइलों के 255.255.255.255 की तरह एक संस्करण है:winmd फ़ाइलों के लिए संस्करण 255.255.255.255 क्या इंगित करता है?

विंडोज, संस्करण = 255.255.255.255, संस्कृति = तटस्थ, PublicKeyToken = अशक्त

मेट्रो ऐप्स के पास इस संस्करण संख्या के साथ ऐसी असेंबली का संदर्भ है।


इसके अलावा Windows.winmd ही संदर्भ:

mscorlib, संस्करण = 255.255.255.255, संस्कृति = तटस्थ, PublicKeyToken = b77a5c561934e089

हालांकि, एक इस संस्करण संख्या नहीं है के साथ विधानसभा जहां तक ​​मुझे पता है, मौजूद है।

क्या इस संस्करण संख्या का एक विशेष अर्थ है? क्या इसके लिए कोई दस्तावेज है?

+0

@ हेनकहोल्टरमैन - हाँ, लेकिन यह क्या इंगित करता है? क्या इसका कोई विशेष अर्थ है? – logicnp

+0

संभवतः उन्होंने एक संस्करण संख्या चुना जो विकास के लिए व्यर्थ है, और जब रिलीज की बात आती है तो वे वास्तविक उपयोग करेंगे। शायद विंडोज़ 3.95 की पुनरावृत्ति को रोकने के लिए (http://blogs.msdn.com/b/oldnewthing/archive/2004/02/13/72476.aspx)? –

+0

@ ta.speot.is: नहीं, यह एक मनमाना संख्या है। यह कुछ भी हो सकता था। –

उत्तर

8

ईसीएमए 335 असेंबली के पास संस्करण संख्या होना आवश्यक है। लेकिन विंडोज रनटाइम टाइप रेज़ोल्यूशन एल्गोरिदम संस्करण संख्या का उपयोग नहीं करता है, इसलिए Winmd प्रारूप बनाने वाली टीम ने असेंबली संस्करण संख्या के लिए 255.255.255.255 का मनमाना संस्करण संख्या चुना है।

इससे यह सुनिश्चित करने में मदद मिलती है कि कोई भी प्रकार संकल्प करते समय .Net प्रकार रिज़ॉल्यूशन एल्गोरिदम का उपयोग करने का प्रयास नहीं करता है (यह सही नहीं है, दुर्भाग्यवश कुछ टूल अभी भी .Net प्रकार रिज़ॉल्यूशन एल्गोरिदम का उपयोग करते हैं)।

ओह और mscorlib संदर्भ प्रो-फॉर्मा संदर्भ है - ईसीएमए 335 की आवश्यकता है कि सभी टाइपफ्रफ़ के पास एक असेंबलीफ्रेंड है और WINMD फ़ाइल प्रारूप ने विशिष्ट ईसीएमए 335 प्रकारों को टाइपफ्रे का उपयोग किसी विशिष्ट प्रकार के संकेतक के रूप में करने के लिए चुना है। उदाहरण के लिए, Winrt "enum" निर्माण को एक प्रकार के रूप में दर्शाया गया है जो "System.Enum" को बढ़ाता है - एक Winmd फ़ाइल के लिए "System.Enum" भाग केवल एक स्ट्रिंग है (यह कुछ भी हो सकता था), और हल नहीं किया जा सकता एक वास्तविक प्रकार उस स्ट्रिंग को मेटाडाटा में एक टाइपफ्रफ़ के रूप में दर्शाया गया है और टाइपफ्रेज़ को असेंबलीफ होना चाहिए - हमने सिस्टम के mscorlib संस्करण का उपयोग करना चुना है। Enum enum के लिए असेंबलीफ के रूप में जाना क्योंकि यह सुविधाजनक था।

+0

बीटीडब्ल्यू, यदि आप कभी भी एक टिप्पणी देखते हैं कि एक .winmd फ़ाइल "मजबूत नाम की आवश्यकता है", यह एक संकेत है कि आप एक उपकरण सेट का उपयोग कर रहे हैं जो .NET assemblies को समझता है लेकिन विंडोज रनटाइम मेटाडेटा नहीं। –

3

ध्यान रखें कि .winmd फ़ाइलों में WinRT इंटरफेस के लिए मेटाडेटा होता है। विंडोज़ यह नहीं मान सकता कि .NET का कोई विशेष संस्करण उपयोग किया जाएगा। विंडोज 8 .NET 4.5

से अधिक लंबे समय तक होगा। न ही एक .NET प्रोजेक्ट मान सकता है कि यह विंडोज के किसी विशेष संस्करण पर चलाएगा। इसे विंडोज 8 पर विंडोज 8 पर भी काम करना चाहिए।

तो 255.255.255.255 को "किसी भी संस्करण" के रूप में समझें।

+0

यह समझ में आता है। लेकिन WinRT समय बीतने के रूप में खुद को बदलता नहीं है और इसलिए मुझे लगता है कि winmd फ़ाइलों को एक स्पष्ट संस्करण संख्या देना बेहतर होगा। – logicnp

+0

विनरेट संस्करण अलग-अलग किया जाता है। यह नहीं पता कि कैसे, बिल्ड कॉन्फ़्रेंस सत्र में "यह अलग है" का उल्लेख किया गया था लेकिन आगे स्पष्टीकरण के बिना। –

+0

@ हंसपैसेंट: प्रत्येक विंडोज रनटाइम प्रकार में एक विंडोज़ है। फाउंडेशन।Metadata.VersionAttribute विशेषता जो उस संस्करण को इंगित करती है जिसमें प्रकार पेश किया गया था। –

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