2015-06-12 7 views
17

यह प्रश्न थोड़ा मूर्ख या अजीब लग सकता है लेकिन मैंने .NET CLR, JIT कंपाइलर और यह कैसे ब्ला ब्ला ब्लाह के बारे में बहुत कुछ सुना है ... लेकिन अब मैं सोच रहा हूं कि यह कहां स्थित है या होस्ट किया गया है।जहां वास्तव में .NET रनटाइम (सीएलआर) है, जेआईटी कंपाइलर स्थित है?

  • विंडोज ऑपरेटिंग प्रणाली का एक हिस्सा है जब हम वास्तव में .नेट फ्रेमवर्क स्थापित के रूप में की मेजबानी -

    यह है?

या

  • यह कुछ .exe जो हम कार्य प्रबंधक में देख सकते हैं

मैं इस बारे में विस्तृत जवाब के लिए देख रहा हूँ का एक हिस्सा है। किसी रूप में इस सवाल का फ्रेम हो सकता है "कैसे विंडोज ऑपरेटिंग सिस्टम चलाता है/कार्यान्वित नेट निष्पादन नेट रनटाइम अंदर?

+0

क्या यह वास्तव में बहुत महत्वपूर्ण है यदि फ्रिज छोटे elves के उपयोग या भौतिकी के नियमों के माध्यम से ठंडा हो जाता है? :-) – xanatos

+0

डीएनएक्स कैसे काम करता है और यह .NET रनटाइम से अलग कैसे है इस पर एक स्पष्टीकरण के लिए http://stackoverflow.com/a/30377175/613130 ​​देखें ... प्रश्न – xanatos

+1

@xanatos से जुड़ा हुआ है, अगर आप elves में से एक बनना चाहते हैं, मैं कहूंगा कि यह बहुत महत्वपूर्ण है। – atlaste

उत्तर

19

जहां वास्तव में यह स्थित या होस्ट

यह सिर्फ एक सादे DLL है, तो आप वापस मिल जाएगा सी में यह x86 संस्करण है: \ Windows \ Microsoft.NET \ फ्रेमवर्क \ v4। 0.३०,३१९ \ clrjit.dll। X64 संस्करण फ्रेमवर्क 64 निर्देशिका में है। .NET v2 संस्करण का एक अलग नाम था, mscorjit.dll, इसे v2.0.50727 निर्देशिकाओं में वापस ढूंढें।

यह "होस्टेड" नहीं है, ऑपरेटिंग सिस्टम पूरी तरह से अनजान है कि यह मौजूद है। सीएलआर जानता है कि इसे कैसे ढूंढें और लोड करें। अनिवार्य रूप से, यह सीएलआर है जो एक कार्यक्रम शुरू करने का फैसला करता है। इसमें बस डीएलएल नाम हार्ड-कोड किया गया है और इसे लोड करने के लिए लोड लाइब्रेरी ("clrjit.dll") का उपयोग करें, कारखाना फ़ंक्शन प्राप्त करने के लिए GetProcAddress ("getJit")। कोरकएलआर स्रोत कोड में आप कुछ देख सकते हैं, भले ही जिटर उस सीएलआर संस्करण में एक अलग डीएलएल नहीं है।

आप एक्सप्लोरर के साथ सीएलआर भी देख सकते हैं, फिर से सिर्फ एक सादा डीएलएल। यह v2 संस्करणों में mrcorwks.dll और mscorsvc.dll में clr.dll है v2 संस्करणों में। अलग-अलग कचरा कलेक्टरों के साथ दो अलग-अलग लोग, "wks" वर्कस्टेशन संस्करण है, "svc" सर्वर संस्करण है। <gcServer> कॉन्फ़िगर फ़ाइल प्रविष्टि की तुलना करें।

जो सवाल उठाता है कि "सीएलआर कैसे लोड हो जाता है?" यह c: \ windows \ syswow64 \ mscoree.dll का काम है, जब आप अपने EXE प्रोजेक्ट में x64 को लक्षित करते हैं तो आप c: \ windows \ system32 \ mscoree.dll का उपयोग करेंगे। प्रत्येक .NET असेंबली में अप्रबंधित कोड के 5 या 9 बाइट होते हैं, जो उस डीएलएल में कूदते हैं। या तो _CorExeMain या _CorDllMain, इस पर निर्भर करता है कि असेंबली exe या पुस्तकालय के रूप में बनाया गया था या नहीं। mscoree.dll असेंबली में मेटाडेटा को देखता है और निर्णय लेता है कि सीएलआर के किस संस्करण को लोड करने की आवश्यकता है ताकि इसे ठीक तरह से निष्पादित किया जा सके।

बहुत अधिक शेंगेनियां चल रही हैं, मैंने अभी 10,000 फीट व्यू पोस्ट किया है जिसके लिए आपने पूछा था। यदि यह आपकी रूचि रखते हैं तो आप शायद पर्दे के पीछे आदमी को देखने के लिए custom CLR hosting के बारे में और जानना चाहते हैं।

16

कैसे विंडोज ऑपरेटिंग सिस्टम चलाता है/नेट निष्पादन नेट रनटाइम अंदर चलाता कार्यान्वित?

प्रत्येक .NET प्रबंधित असेंबली या निष्पादन योग्य में विशेष सीएलआर हेडर होते हैं, जिन्हें आप आईएलडीएएसएम में असेंबली देखकर देख सकते हैं। यह हेडर रनटाइम के संस्करण को इंगित करता है जिसे लोड करने की आवश्यकता होती है। इसके अलावा, Import Address Table के साथ छवि अनुभाग है, यह इंगित करने के लिए कि क्या लोड किया जाना चाहिए:

----- Image sections: 
Import Address Table 
DLL : mscoree.dll 
      0x00002000 Import Address Table 
      0x0000a37e Import Name Table 
      0   Time Date Stamp 
      0   Index of First Forwarder Reference 

      0x0000 _CorDllMain 

----- CLR Header: 
Header size:      0x00000048 
Major runtime version:    0x0002 
Minor runtime version:    0x0005 
0x00003184 [0x00007078] address [size] of Metadata Directory:   
Flags:        0x00000001 
Entry point token:     0x00000000 
0x00000000 [0x00000000] address [size] of Resources Directory:  
0x00000000 [0x00000000] address [size] of Strong Name Signature:  
0x00000000 [0x00000000] address [size] of CodeManager Table:   
0x00000000 [0x00000000] address [size] of VTableFixups Directory:  
0x00000000 [0x00000000] address [size] of Export Address Table:  
0x00000000 [0x00000000] address [size] of Precompile Header: 

जब ऑपरेटिंग सिस्टम, mscoree.dll (या शिम) द्वारा भाग गया भरी हुई है, और यह .NET 2.0 या नीचे, जो कर रहे हैं के लिए clr.dll को bootstrapper और .NET 4.0 और इसके बाद के संस्करण, या mscordacwks.dll के लिए clrjit.dll और mscorjit.dll है क्रमशः रनटाइम और जेआईटी। आप देख सकते हैं कि देशी डीएल एंट्री पॉइंट को क्लास लाइब्रेरी के लिए _CorDllMain विधि, और _CorExeMain निष्पादन योग्य के लिए निर्देश दिया गया है, जो प्रविष्टि बिंदु के लोडिंग और जिंग के लिए ज़िम्मेदार है। बदले में, वे प्रबंधित वातावरण में आपके अनुप्रयोग प्रविष्टि बिंदु को कॉल करेंगे।

0

यह मेरी समझ पर आधारित है और आपको उत्तर देने की दिशा में मार्गदर्शन करेगा, लेकिन पूरी तरह से बाहर नहीं हो सकता है।

कि डॉटनैट रनटाइम (CLR, आदि) को बनाने वाली EXE/DLL फ़ाइलें निम्न स्थानों में स्थित हैं:

C:\Windows\Microsoft.NET\Framework // for the 32 bit runtime 
C:\Windows\Microsoft.NET\Framework64 // for the 64 bit runtime 

वहाँ के भीतर, आप विभिन्न संस्करणों है जैसे 2.0.50727, 3.0 , 3.5, और 4.0.3031 9 (आज मेरे सिस्टम पर संस्करण)।

यह वह जगह है जहां एमएसबिल्ड, साथ ही साथ आईआईएस के साथ पंजीकृत फाइलें भी स्थित हैं और चलती हैं।

मुझे नहीं पता कि यह रनटाइम पर विंडोज द्वारा होस्ट किया जा रहा है या यदि कोई वास्तविक EXE है तो आप डीबगर से संलग्न हो सकते हैं और कार्य प्रबंधक में देख सकते हैं।

उम्मीद है कि यह आपके लिए कुछ और जानकारी प्रदान करता है।

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