जबकि हंस पासेंट सबकुछ में सही है, लेकिन वह कहता है कि वह एक महत्वपूर्ण बिंदु याद करता है जो इस हार में पीई हेडर की भूमिका है।
क्योंकि डॉटनेट 4.5 डॉटनेट 4.0 के शीर्ष पर एक जगह स्थापित है, और क्योंकि यह डॉटनेट संस्करण संख्या को अद्यतन नहीं करता है, नतीजा यह है कि डॉटनेट 4.5 का उपयोग करके बनाए गए बाइनरी में पुराने डॉटनेट 4.0 संस्करण संख्या है बाइनरी के पीई हेडर (4.0.3031 9)।
क्योंकि सीएलआर पीई हेडर में इस मान का उपयोग यह निर्धारित करने के लिए करता है कि डॉटनेट फ्रेमवर्क का कौन सा संस्करण लोड करना है, और क्योंकि यह मान डॉटनेट 4.5 के खिलाफ बनाए गए असेंबली के लिए नहीं बदलता है, फिर किसी भी अतिरिक्त जानकारी की अनुपस्थिति में सीएलआर यह जानने का कोई तरीका नहीं है कि पीई हेडर में 4.0.3031 9 के साथ एक असेंबली को डॉटनेट 4.0 या 4.5 से लिंक करने की आवश्यकता है या नहीं।
यह app.config में समर्थितRuntime तत्व की उपस्थिति है जो सीएलआर को यह अतिरिक्त जानकारी प्रदान करता है। तो यदि आप एक डॉटनेट 4.5 एप्लिकेशन को एक सिस्टम पर मौजूद समर्थित रंटिम एंट्री के साथ लॉन्च करते हैं जिसमें केवल डॉटनेट 4.0 स्थापित है, तो सीएलआर आपको एक सूचित संदेश पॉप अप करेगा कि आपके पास डॉटनेट इंस्टॉल करने का आवश्यक संस्करण नहीं है। जबकि यदि आप उसी डॉटनेट 4.5 एप्लिकेशन को के बिना लॉन्च करते हैं, तो उस सिस्टम पर समर्थित रंटिम प्रविष्टि जिसमें केवल डॉटनेट 4.0 स्थापित है, तो एप्लिकेशन चलाना शुरू हो सकता है, लेकिन फिर बाद में जब यह डॉटनेट 4.5 सुविधा का उपयोग करने का प्रयास करता है तो क्रैश हो जाता है।
वीएस2012 आरसी और लक्ष्यीकरण डॉटनेट 4.5 का उपयोग करके बनाई गई परियोजनाओं में समर्थित रूटटाइम प्रविष्टि गायब हो सकती है, वीएस2012 आरटीएम का उपयोग करके बनाई गई परियोजनाओं में प्रवेश हो सकता है।
इसलिए जब उपयोगकर्ता .NET 4.0 है तो यह त्रुटि प्रदर्शित करेगा कि उस कॉन्फ़िगरेशन के साथ .NET 4.5 आवश्यक है। अगर उस कॉन्फ़िगरेशन के बारे में नहीं है तो कैसे?क्या मैं .NET 4.5 को लक्षित करने के बाद भी त्रुटि को फेंक नहीं सकता? – friend
हां, लेकिन एक जो व्याख्या करने के लिए बहुत कठिन है। MissingMethodException या FileNotFoundException की तरह, एक दोस्ताना संदेश नहीं है जैसे "आपके पास .NET 4.5 नहीं है, क्या आप मुझे इसे अपने लिए इंस्टॉल करना चाहते हैं?" Http://stackoverflow.com/a/10033128/17034 –
@nobugz देखें, मैं हमेशा थोड़ा उलझन में रहा हूं क्योंकि मेरे आवेदन के साथ .NET के किस संस्करण को उपलब्ध कराने की आवश्यकता है। उपर्युक्त आपकी टिप्पणी के आधार पर, क्या मैं समझ सकता हूं कि .NET 4.5 ** को लक्षित करने वाले अनुप्रयोगों को केवल ** .NET 4.5 उपलब्ध करना है? दूसरे शब्दों में, मुझे चिंता करने की ज़रूरत नहीं है अगर .NET 3.5, 3.0, आदि सिस्टम पर हैं? –