2011-07-19 16 views
5

मुझे 32 बिट से 64 बिट तक एक प्रोजेक्ट अपग्रेड करना होगा। मेरा प्रोजेक्ट वर्तमान में .NET 2.0 पर है (जल्द ही 4.0 होगा, लेकिन इस मुद्दे के लिए वास्तव में कोई फर्क नहीं पड़ता)। मेरी परियोजना कुछ पुरानी नेट 1.1 असेंबली का संदर्भ दे रही है, जो कि मेरे पास केवल बाइनरी रूप में है। जैसा कि आप सभी जानते हैं, 64 बिट समर्थन केवल .NET 2.0 में जोड़ा गया था, और मुझे उम्मीद थी कि मेरा पुराना असेंबली के कारण मेरा एप्लिकेशन नहीं चलेगा।64 बिट अनुप्रयोगों से .NET 1.1 असेंबली

हालांकि, मेरा आवेदन 64 बिट मोड में x64 सर्वर पर चलता है (टास्क मैनेजर में कोई सितारा दिखाया नहीं जाता है) .net 1.1 dll का संदर्भ देते समय।

मेरे प्रश्न हैं:

  1. यह क्यों चलता है? मैंने पहले पढ़ा था कि आप 64 बिट ऐप्स में .NET 1.1 असेंबली का उपयोग नहीं कर सकते हैं।
  2. यदि मैं 1.1 असेंबली रखता हूं तो क्या कोई कमी है? या क्या मुझे उन 1.1 असेंबली के नए संस्करण प्राप्त करने में प्रयास करना चाहिए?

संपादित करें: मैं यह उल्लेख करना भूल गया कि 64 बिट में एप्लिकेशन (एएसपीनेट) को मूल रूप से चलाने की आवश्यकता है। एप्लिकेशन 64 बिट में चलता है क्योंकि मैंने अपने एप्लिकेशन पूल पर 32 बिट संगतता अक्षम कर दी है।

EDIT2: मैंने बस x64 के लिए संकलित अनुप्रयोग को संकलित और चलाने की कोशिश की। यह काम करता हैं। तो यह शुद्ध 64 बिट मोड में चलता है, इसके बारे में कोई सवाल नहीं है।

+0

मुझे लगता है कि आपकी असेंबली 32-संगतता मोड में चलती है। तो यह बिना किसी बदलाव के काम करेगा। – VMAtm

उत्तर

6

एक .NET 1.1 असेंबली में एक ही प्रकार का आईएल एक .NET 2 या .NET 4 असेंबली है। केवल मेटाडेटा का प्रारूप बदल गया है। जिटर को इसे 64-बिट मशीन कोड में अनुवाद करने में कोई फर्क नहीं पड़ता है और सीएलआर पुराने मेटाडेटा प्रारूप को पढ़ सकता है। केवल अगर .NET 1.1 असेंबली में देशी कोड होता है तो आपको कोई समस्या होगी। Corflags.exe उपयोगिता, अकेले बिट। उस असेंबली के पुनर्निर्माण के लिए कोई अनिवार्य कारण नहीं है।

+0

तो मुझे लगता है कि .NET 1.1 पीई 32 हेडर के साथ असेंबली को जोड़ता है और यह सीएलआर हेडर में 32 बिट केवल ध्वज उत्सर्जित नहीं करता है? –

+0

हां, असेंबली अकेले हैं (वास्तव में अगर मैं सही ढंग से समझ गया, तो सभी .NET 1.1 असेंबली अकेले हैं)। मैं कैसे पता लगा सकता हूं कि मेरे बाइनरी असेंबली प्लेटफ़ॉर्म के माध्यम से देशी कोड को कॉल करते हैं या नहीं? – user328087

+0

पिनकोक के साथ इसका कोई संबंध नहीं है। आपको C++/CLI कंपाइलर का उपयोग कर असेंबली में देशी मशीन कोड मिलता है। खैर, प्रबंधित C++ 1.1 दिनों में वापस। यह निश्चित रूप से संभव है कि पुराने कोड में एक पिनवोक घोषणा विंडोज के 64-बिट संस्करण के लिए अमान्य है, एक इंटिप्ट की आवश्यकता होती है जहां एक इंटिप्ट की आवश्यकता होती है। इसके लिए एक डीबगर की आवश्यकता है। –

0

क्या आपका एप्लिकेशन wow32 (32-बिट इम्यूलेशन मोड) के अंतर्गत चल रहा है? अधिकांश एप्लिकेशन वास्तव में x64 मोड में नहीं चलते हैं, वे पुराने x86 सिस्टम पर पिछड़ी संगतता रखने के लिए एप्लिकेशन को wow32 (x86 मोड) में चलाने के लिए मजबूर करते हैं। अन्यथा एप्लिकेशन केवल x64 सिस्टम पर चलता है लेकिन x86 पर नहीं।

x86 मोड (यहां तक ​​कि x64 सिस्टम पर) चलाने के लिए एप्लिकेशन को मजबूर करना किसी भी मैनचेन को चलाने की अनुमति देता है चाहे कोई 32 या 64 बिट विंडोज ओएस हो।

+0

मेरा ऐप शुद्ध 64 बिट मोड में चलाता है। यह x64 में संकलित है, 32-बिट संगतता अनुप्रयोग पूल में अक्षम है और कार्य प्रबंधक में कोई सितारा नहीं है। – user328087

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