मैं Aequitarum के विश्लेषण से सहमत: MSDN कि आप देख सकते हैं, यहाँ इस विषय से संबंधित प्रलेखन के बहुत सारे है। बस कुछ अतिरिक्त बिंदु:
इंजन प्रक्रियाओं के सभी के लिए कोड साझा किया जाता है, इसलिए मुझे लगता है कि एक साझा विधानसभा हो सकता है यह सोचते हैं रहा हूँ?
यह उचित लगता है।
एक साझा विधानसभा एक परियोजना है कि यह खपत है, अगर यह GAC में होना चाहिए था कैसे करता है यह भस्म हो के रूप में ही समाधान में है, तो?
जादू।
ठीक है, यह जादू नहीं है। मान लीजिए कि आपके समाधान आपकी प्रक्रिया प्रोजेक्ट इंजन प्रोजेक्ट का संदर्भ है। जब आप समाधान बनाते हैं, तो आप एक परियोजना असेंबली का उत्पादन करेंगे जिसमें इंजन असेंबली का संदर्भ है। विजुअल स्टूडियो फिर विभिन्न फ़ाइलों को सही निर्देशिका में कॉपी करता है। जब आप प्रक्रिया असेंबली निष्पादित करते हैं, तो रनटाइम लोडर इंजन असेंबली के लिए वर्तमान निर्देशिका को देखना जानता है। अगर इसे वहां नहीं मिल रहा है, तो यह वैश्विक असेंबली कैश में दिखता है। (यह पॉलिसी लोड करने का एक बेहद सरलीकृत दृश्य है; वास्तविक नीति उस से काफी जटिल है।)
जीएसी में सामग्री वास्तव में वैश्विक कोड होना चाहिए; कोड जो आप उचित रूप से असमान परियोजनाओं का उपयोग करने की अपेक्षा करते हैं।
क्या इसका मतलब है कि इंजन निर्माण को प्रत्येक बिल्ड पर तैनात किया जाना चाहिए?
मुझे यकीन नहीं है कि "पुनर्वित्त" से आपका क्या मतलब है। जैसे मैंने कहा, यदि आपके पास प्रोजेक्ट-टू-प्रोजेक्ट संदर्भ है, तो बिल्ड सिस्टम स्वचालित रूप से फ़ाइलों को सही स्थानों पर कॉपी कर देगा।
सिद्धांत कारण है कि हम इस प्रक्रिया से फिल्टर अलग (केवल एक प्रक्रिया का उपयोग करता है) है, ताकि हम इतना है कि प्रक्रिया निष्पादन अद्यतन करने की आवश्यकता नहीं है फिल्टर स्वतंत्र रूप से इस प्रक्रिया से तैनात कर सकते हैं
मैं सवाल करता हूं कि यह वास्तव में मूल्यवान है या नहीं। परिदृश्य एक: कोई फ़िल्टर असेंबली नहीं, सभी फ़िल्टर कोड project.exe में है। आप फ़िल्टर कोड को अपडेट करना चाहते हैं; आप project.exe अद्यतन करते हैं। परिदृश्य दो: filter.dll, project.exe। आप फ़िल्टर कोड को अपडेट करना चाहते हैं; आप filter.dll अद्यतन करते हैं। परिदृश्य की तुलना में परिदृश्य दो सस्ता या आसान कैसे है? दोनों स्थितियों में आप एक फ़ाइल अपडेट कर रहे हैं; यह क्यों मायने रखता है कि फ़ाइल का नाम क्या है?
हालांकि, शायद यह वास्तव में आपके विशेष परिदृश्य के लिए सस्ता और आसान है। असेंबली के बारे में समझने की मुख्य बात यह है कि स्वतंत्र रूप से संस्करण योग्य और पुनर्वितरण योग्य कोड की सबसे छोटी इकाई है। यदि आपके पास दो चीजें हैं और यह संस्करण को समझ में आता है और उन्हें एक-दूसरे से स्वतंत्र रूप से भेजता है, तो वे अलग-अलग असेंबली में होना चाहिए; अगर ऐसा करने में कोई मतलब नहीं है, तो वे एक ही असेंबली में होना चाहिए।
मैंने पढ़ा है कि असेंबली अन्य असेंबली के विशिष्ट संस्करणों से लिंक हैं, इसलिए यदि मैं केवल डीएलएल अपडेट करता हूं, तो इसे वास्तव में छेड़छाड़ माना जाता है। मैं EXE को बदले बिना डीएलएल कैसे अपडेट कर सकता हूं? क्या वह प्रकाशक नीति है?
एक असेंबली को "मजबूत नाम" दिया जा सकता है। जब आप अपनी असेंबली Foo.DLL नाम देते हैं, और आप Bar.EXE लिखते हैं, "Bar.EXE Foo.DLL पर निर्भर करता है", तो रनटाइम Foo.DLL नामक कुछ भी लोड करेगा; फ़ाइल नाम मजबूत नहीं हैं। यदि एक बुरा हैकर क्लाइंट मशीन पर Foo.DLL का अपना संस्करण प्राप्त करता है, तो लोडर इसे लोड करेगा। एक मजबूत नाम बार.एक्सईई कहता है कि "बार निगम द्वारा लिखित बार.एक्सई संस्करण 1.2 फू निगम द्वारा लिखित Foo.DLL संस्करण 1.4 पर निर्भर करता है", और सभी सत्यापन फ़ू कॉर्प और बार कॉर्प से जुड़े क्रिप्टोग्राफ़िक रूप से मजबूत कुंजी के विरुद्ध किए जाते हैं।
तो हां, एक असेंबली को केवल एक विशिष्ट कंपनी के विशिष्ट संस्करण के खिलाफ बाध्य करने के लिए बाध्य करने के लिए कॉन्फ़िगर किया जा सकता है। एक नए संस्करण का उपयोग करने के लिए असेंबली को अपडेट करने के लिए आप क्या कर सकते हैं एक छोटी एक्सएमएल फाइल बनाते हैं जो लोडर को बताती है "आप जानते हैं कि मैंने कैसे कहा था कि मैं फू.डीएलएल v1.4 चाहता था? अच्छा, वास्तव में यदि 1.5 उपलब्ध है, तो इसका उपयोग करना ठीक है वह भी।"
मुझे क्या देखना चाहिए? मुझे सी # और .NET के बारे में बहुत सारी किताबें दिखाई देती हैं, लेकिन तैनाती या भवन या परीक्षण या भाषा से संबंधित चीजों के बारे में कोई भी नहीं।
पुस्तकों में तैनाती को अक्सर उपेक्षित किया जाता है, मैं सहमत हूं।
यदि आप प्रबंधित विंडोज अनुप्रयोगों की तैनाती में रूचि रखते हैं तो मैं "क्लिकऑन" की खोज करके शुरू करूंगा।
एक अच्छी किताब जो जेफरी रिक्टर द्वारा सी # के माध्यम से वास्तव में क्या फ़ाइलें, विधानसभाओं और मॉड्यूल हैं का वर्णन करता है CLR है। IMHO यह पुस्तक .NET –