2012-10-04 16 views
18

जहां तक ​​मुझे पता है, नीचे दिए गए अधिकांश प्रकार अब हैं, और हमेशा mscorlib और/या System.dll में परिभाषित किए गए हैं।System.IO.dll का बिंदु क्या है?

हालांकि, v4 ढांचे निर्देशिकाओं में देखकर (मेरे पास 4.5 स्थापित है, यह सुनिश्चित नहीं है कि यह वेनिला v4 में भी मौजूद है), मुझे System.IO.dll नामक एक असेंबली मिलती है।

परावर्तक में इसकी जांच, मुझे कोई वास्तविक कोड नहीं दिखाई दे रहा है। सभी मैं पा सकते हैं निम्नलिखित प्रविष्टियों हैं:

[assembly: TypeForwardedTo(typeof(BinaryReader))] 
[assembly: TypeForwardedTo(typeof(BinaryWriter))] 
[assembly: TypeForwardedTo(typeof(EndOfStreamException))] 
[assembly: TypeForwardedTo(typeof(FileNotFoundException))] 
[assembly: TypeForwardedTo(typeof(InvalidDataException))] 
[assembly: TypeForwardedTo(typeof(IOException))] 
[assembly: TypeForwardedTo(typeof(MemoryStream))] 
[assembly: TypeForwardedTo(typeof(SeekOrigin))] 
[assembly: TypeForwardedTo(typeof(Stream))] 
[assembly: TypeForwardedTo(typeof(StreamReader))] 
[assembly: TypeForwardedTo(typeof(StreamWriter))] 
[assembly: TypeForwardedTo(typeof(StringReader))] 
[assembly: TypeForwardedTo(typeof(StringWriter))] 
[assembly: TypeForwardedTo(typeof(TextReader))] 
[assembly: TypeForwardedTo(typeof(TextWriter))] 

सभी वापस mscorlib की ओर इशारा करते (मुझे लगता है, उन सभी को चेक नहीं किया गया है)। मैंने चारों ओर एक नज़र डाली है, और मुझे कोई फ्रेमवर्क संस्करण नहीं दिख रहा है (जैसे चांदी की रोशनी, कॉम्पैक्ट, आदि) जहां ये प्रकार mscorlib में नहीं हैं। तो, क्या कोई जानता है कि यह असेंबली क्यों मौजूद है (और अब क्यों)?

+2

मैं केवल अनुमान लगा सकता हूं लेकिन शायद प्लेटफॉर्म भावी रिलीज के लिए पोर्टेबिलिटी? आरएक्स बार्ट डी स्मेट में जितना संभव हो सके मंच विनिर्देशों को कारक बनाने के लिए असेंबली के बीच सामानों के चारों ओर स्थानांतरित हो गया है। – rene

+0

वेनिला v4 में मौजूद नहीं दिखता है। – AakashM

उत्तर

10

आपको संदर्भ असेंबली मिली। यह अजीब लग सकता है, क्योंकि आप निश्चित रूप से .NET प्रोजेक्ट में ऐसी संदर्भ असेंबली का उपयोग नहीं करते हैं जो .NET> = 4.0 को लक्षित करता है। आप आमतौर पर उन्हें अपनी dev मशीन पर C: \ Program Files (x86) \ संदर्भ असेंबली निर्देशिका से प्राप्त करते हैं। लेकिन यह एकमात्र ऐसा परिदृश्य नहीं है जिसमें एक कंपाइलर का उपयोग किया जाता है। जब आप अपने प्रोग्राम में System.CodeDom का उपयोग करते हैं या एक्सएमएल क्रमबद्धता पर निर्भर करते हैं तो आप एक कंपाइलर का भी उपयोग करते हैं।

सिस्टम के बारे में विशिष्ट। कोडडॉम और एक्सएमएल क्रमबद्धता यह है कि संकलक आपके उपयोगकर्ता की मशीन पर चलता है। और यह कि आप एक विशिष्ट .NET Framework संस्करण को लक्षित नहीं कर सकते हैं। आपके उपयोगकर्ता की मशीन में आपके मशीन के लक्ष्यीकरण पैक नहीं हैं। तो यह मशीन पर जो भी संस्करण स्थापित किया जाता है उसे प्राप्त होता है। C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 में फ़ाइलें संदर्भ असेंबली शामिल हैं जो उस स्थापित संस्करण से मेल खाते हैं। यदि मशीन किसी अन्य .NET 4.x रिलीज के साथ अपडेट हो जाती है तो उन संदर्भ असेंबली भी अपडेट हो जाती हैं।

एकमात्र संभावित परिदृश्य नहीं है, संभावना है कि आप कमांड लाइन से बनाते समय भी उनका उपयोग करेंगे। या एक बिल्ड सर्वर पर और एक वीएस लाइसेंस के लिए भुगतान नहीं करने का फैसला किया, बहुत बुरा विचार। या एक ILMerge कमांड में, अत्यधिक बुरा विचार। वे परिदृश्य बहुत अधिक परेशानी हैं। यह तब तक ठीक काम करता है जब तक कि निर्मित असेंबली उसी मशीन पर रहती है। लेकिन अगर वे किसी अन्य मशीन की यात्रा नहीं करते हैं, तो एक अलग फ्रेमवर्क संस्करण स्थापित है। यह this Q+A में स्पष्ट रूप से स्पष्ट रहस्यमय रनटाइम अपवाद उत्पन्न कर सकता है।

System.IO.dll काफी विदेशी है। जब आप पीसीएल असेंबली के संदर्भ में System.CodeDom चलाते हैं तो आपको केवल इसकी आवश्यकता होगी। इसकी प्राथमिक भूमिका घोषणाओं को छिपाने के लिए है, जिस तरह से आपके द्वारा चुनी गई प्रोफ़ाइल में इसका उपयोग नहीं किया जाना चाहिए। System.IO नामस्थान को छिपाने की आवश्यकता है क्योंकि जब आप WinRT को लक्षित करते हैं तो इन प्रकारों का उपयोग नहीं किया जा सकता है। लेकिन अन्यथा कारण यह है कि इसमें कोई प्रकार नहीं है, [TypeForwardedTo] संकलक को बताता है कि प्रकार डेस्कटॉप मशीन पर समर्थित है और कहीं और घोषणा की तलाश करने के लिए, mscorlib.dll

+0

मैं इस जवाब को स्वीकार करने के बारे में विवादित हूं। यह एक संदर्भ असेंबली नहीं है - यह अन्य कोर, फ्रेमवर्क (गैर-संदर्भ) असेंबली के साथ 'सी: \ विंडोज \ माइक्रोसॉफ्ट.Net \ framework \ v4.0.30319' से है और जीएसी में संग्रहीत एक के समान है। तो अनुच्छेद 1 और 5 सही नहीं हैं। अनुच्छेद 4 भी लक्ष्य को याद करता है - यह वी 4.5 के लिए पेश किए जाने पर विरासत के कारणों के लिए शायद ही कभी हो सकता है। लेकिन अनुच्छेद 3 सही के बारे में प्रतीत होता है। –

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