2008-10-29 8 views
5

क्षमा करें यदि मैं जो कुछ कहने जा रहा हूं, उसे कोई समझ नहीं आती है या कुछ स्पष्ट नहीं दिखता है - सीएलआर आंतरिकों का मेरा ज्ञान स्पॉटी है।x64 .NET संकलन/प्रक्रिया एक्सप्लोरर विषमता

यदि मैं सही ढंग से समझता हूं, तो अगर मैं केवल वीएस 2 के 5 में 'एएनसीपीयूयू' के लिए एक समाधान तैयार करता हूं (या उन सेटिंग्स के साथ उस .sln फ़ाइल पर MSBuild को इंगित करता हूं) तो बाइनरी केवल एमएसआईएल तक संकलित होती है। 32 बिट बिट प्लेटफॉर्म पर निष्पादित होने पर या 6464 बिट कोड पर निष्पादित होने पर उन्हें 32-बिट तक JITted प्राप्त होता है ... सही?

डीएलएल का उपयोग वेब ऐप के लिए किया जाता है और W3WP.exe प्रक्रिया में होस्ट किया जाता है। प्रक्रिया एक्सप्लोरर मुझे बताता है कि W3WP एक 64-बिट प्रक्रिया है।

लेकिन जब मैं डीएलएल दृश्य में इन डीएलएल में से किसी एक पर गुणों की जांच करने के लिए प्रोसेस एक्सप्लोरर का उपयोग करता हूं, तो यह कहता है: 'छवि: 32-बिट'। क्या देता है?

यदि मैं प्रश्न में डीएल के खिलाफ corflags चलाता हूं तो यह मुझे बताता है: केवल 1, 32 बीआईटी 0 लेकिन पीई पीई 32। मेरी समझ यह है कि इसका मतलब है कि यह केवल आईएल तक संकलित है, नहीं, यह 32 बिट या 64 बिट तक सीमित नहीं है, लेकिन मैं पूरी तरह स्पष्ट नहीं हूं। क्या पीई 32 फ्लैग इसके साथ कुछ भी करने के लिए 32-बिट के रूप में दिखा रहा है?

उत्तर

5

आपका प्रश्न this question से संबंधित है। आप प्रक्रिया एक्सप्लोरर में जो देख रहे हैं वह छवि का प्रकार है, जो असेंबली के corflags में निर्दिष्ट "रनटाइम संगतता" प्रकार से अलग है।

"कोई भी सीपीयू" सेटिंग करने का बिंदु मूल छवि और असेंबली दोनों में सबसे आम संप्रदाय को मजबूर करना है, ताकि यह विंडोज बूटस्ट्रैपर को .NET के लिए चुनने दे। यह चुनने के लिए कि किस प्रकार का रनटाइम सबसे उपयुक्त होगा वर्तमान मंच

तो, आपके उदाहरण के लिए, आपके पास 32 बिट्स छवि (जैसा पीई हेडर द्वारा निर्दिष्ट है) है, जिसमें "कोई भी CPU" असेंबली है (जैसा कि असेंबली के लिए कॉर्फ्लैग द्वारा निर्दिष्ट है)।

2

तब 32-बिट प्लेटफॉर्म पर निष्पादित होने पर उन्हें 32-बिट तक प्राप्त किया जाता है या 64-बिट कोड को x64 पर निष्पादित किया जाता है ... सही?

ठीक है, आप एक ही exe AnyCPU के लिए संकलित को क्रियान्वित करते हुए देख सकते हैं:

sizeof (IntPtr) == 4 // सच 32 बिट पर

sizeof (IntPtr) == 8 // सच 64 बिट

पर, लेकिन यदि आपकी असेंबली को केवल 32-बिट प्लेटफॉर्म के लिए संकलित प्रक्रिया में संदर्भित किया गया है, तो यह 32 बिट (64-बिट विंडोज़ के लिए वाह में चलाया जाएगा) से जोड़ा जाएगा।

+0

धन्यवाद :) कोई विचार क्यों प्रक्रिया एक्सप्लोरर शरारती है? –

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