प्रेजेंटेशनकोर, सिस्टम.डाटा और इसी तरह की असेंबली।
मुझे त्रुटि संदेश को देखे बिना किसी प्रश्न का उत्तर देने से नफरत है। लेकिन यह माध्यमिक सबूत सवाल का जवाब देने के लिए पर्याप्त है। सबसे पहले, यह त्रुटि नहीं है, यह चेतावनी है। यह इस तरह दिखता है:
चेतावनी CS1607: विधानसभा पीढ़ी - संदर्भित विधानसभा 'System.Data.dll' लक्ष्य के लिए एक अलग प्रोसेसर
तुम भी mscorlib.dll के लिए एक देखेंगे। और एक WPF प्रोजेक्ट में PresentationCore.dll। यहां क्या होता है कि ये असेंबली विशेष हैं, वे मिश्रित-मोड असेंबली हैं। दूसरे शब्दों में, उनमें देशी कोड और प्रबंधित कोड दोनों होते हैं। मूल कोड समस्या निर्माता है, ऐसी असेंबली का उपयोग केवल उस प्रोजेक्ट में किया जा सकता है जो सही प्रोसेसर स्वाद को लक्षित करता है।यदि आप इसे मिश्रित करते हैं तो आपको रनटाइम पर BadImageFormatException मिलता है।
यह .NET असेंबली के साथ एक वास्तविक समस्या नहीं है, आपकी मशीन में वास्तव में दो जीएसी में संग्रहीत इन डीएलएल के संस्करण हैं। एक का उपयोग किया जाएगा यदि आपका प्रोग्राम 32-बिट मोड में चलता है और दूसरा जो 64-बिट मोड में उपयोग किया जाता है। सीएलआर स्वचालित रूप से सही चुनता है।
हालांकि, संदर्भ असेंबली का केवल एक संस्करण है, जो सी: \ windows \ microsoft.net में संग्रहीत है और आप मेटाडेटा को पढ़ने के लिए कंपाइलर को पास करते हैं। यह हमेशा x86 संस्करण है, कोई दूसरा नहीं है इसलिए इसे ढूंढने की परेशानी न करें। दोबारा, यह कोई समस्या नहीं है, केवल संदर्भ असेंबली का मेटाडेटा कंपाइलर द्वारा उपयोग किया जाता है, यह इसके किसी भी कोड को निष्पादित नहीं करता है। और मेटाडेटा असेंबली के बिट-नेस पर निर्भर नहीं है।
फिर भी, यह सभी समस्या हो सकती है यदि आप अपनी मिश्रित-मोड असेंबली बनाते हैं। आप आसानी से दो संस्करण प्रदान करने की आवश्यकता को नजरअंदाज कर सकते हैं। तो संकलक क्या परेशान कर रहा है यह है कि यह देखता है कि आपने अपनी परियोजना के किसी भी एसीसीपीयू या एक्स 64 बिल्ड के लिए कहा है। लेकिन पता चलता है कि संदर्भ असेंबली केवल तभी काम कर सकती है जब आप x86 को लक्षित करते हैं। तो यह आपको थोड़ा सा झुकाता है, सिर्फ एक सभ्य अनुस्मारक है कि कुछ सबूत हैं कि आप इसे गलत समझ रहे हैं और जब आप इसे चलाते हैं तो आपका प्रोग्राम BadImageFormatException पर पड़ सकता है। यह अन्यथा आपकी खुद की संदर्भ असेंबली से अलग फ्रेमवर्क संदर्भ असेंबली का इलाज नहीं करता है।
तो, सुविधा, एक बग नहीं है। सिर्फ एक चेतावनी जो आपके प्रोग्राम को भवन से रोकती नहीं है। आप चेतावनी को सुरक्षित रूप से अनदेखा कर सकते हैं क्योंकि जानते हैं कि .NET के पास रनटाइम पर जीएसी में सही असेंबली उपलब्ध है। उल्लेखनीय है कि .NET 4.0 में यह समस्या नहीं है, यह बहुत अलग संदर्भ असेंबली का उपयोग करती है जिनके पास ILONLY मेटाडेटा ध्वज बंद नहीं है।
हम .NET 3.5 के खिलाफ संकलित कर रहे हैं। दुर्भाग्यवश, ढांचे को बदलना सवाल से बाहर है। क्या आप विस्तार से सोच सकते हैं कि फ्रेमवर्क बदलने से कोई फर्क पड़ता है? मेरे प्रश्न में डीएलएल उन दो संस्करणों से पूरी तरह से स्वतंत्र है, यह सिर्फ एक अलग प्रोसेसर मंच है। – tnw
प्रोजेक्ट फ़ाइल में मैन्युअल रूप से संदर्भों को बदलने का प्रयास करें, जैसा कि सुझाव दिया गया है [यहां] (http://connect.microsoft.com/VisualStudio/feedback/details/525599/compiling-an-net-plplication-for-x64-platform-on -64-बिट-ओएस-चाहिए-जेनरेट-सीएस 1607-चेतावनी) (माइक्रोसॉफ्ट द्वारा 7/12/2010 को 3:23 बजे पोस्ट किया गया) – Jargon
हाँ, उन्हें सीधे csproj फ़ाइल में बदलना एकमात्र तरीका है हस्तांतरण के संदर्भ प्राप्त करने के लिए। अभी भी यह नहीं समझाता है कि क्यों डीबग बनाम रिलीज का निर्माण नहीं होता है। – tnw