2009-10-22 7 views
30

क्या मैं एक .NET अनुप्रयोग को एक तरह से (विजुअल स्टूडियो में सेटिंग्स) कॉन्फ़िगर कर सकता हूं कि यह जीएसी के भीतर एक असेंबली के बजाय "स्थानीय" असेंबली (GAC में नहीं) का संदर्भ देता है, हालांकि दोनों विधानसभाओं का एक ही नाम और वही संस्करण है ?जीएसी से किसी असेंबली को लोड/संदर्भित करने से .NET एप्लिकेशन को कैसे रोकें?

उत्तर

20

यदि दोनों असेंबली मजबूत नामित (हस्ताक्षरित) हैं, तो सीएलआर हमेशा जीएसी से लोड होगा।

  1. लागू विन्यास फाइल की जांच, आवेदन विन्यास फाइल सहित प्रकाशक द्वारा सही विधानसभा संस्करण निर्धारित करता है:

    ये कदम उठाएँ क्रम (How the Runtime Locates Assemblies से) विधानसभा संदर्भ को हल करने का उपयोग करता हैं नीति फ़ाइल, और मशीन कॉन्फ़िगरेशन फ़ाइल। विन्यास फाइल एक दूरस्थ मशीन पर स्थित है, तो क्रम पता लगाने और पहले आवेदन विन्यास फाइल डाउनलोड करना होगा।

  2. जांचता है कि असेंबली का नाम पहले से जुड़ा हुआ है और यदि ऐसा है, तो पहले लोड की गई असेंबली का उपयोग करता है। तो विधानसभा लोड करने के लिए पिछले एक अनुरोध विफल रहा है, अनुरोध तुरंत विधानसभा लोड करने का प्रयास के बिना विफल रहता है।

  3. वैश्विक असेंबली कैश की जांच करता है। यदि असेंबली वहां पाई जाती है, तो रनटाइम इस असेंबली का उपयोग करता है। विधानसभा के लिए

  4. जांच (... कुछ सामग्री छोड़े गए ...)

के रूप में है कि एक ही आलेख में बाद में कहा गया है:

कोई संस्करण विधानसभाओं के लिए जाँच नहीं है मजबूत नामों के बिना, न ही रनटाइम मजबूत नामों के बिना असेंबली के लिए वैश्विक असेंबली कैश में जांच करता है।

तो यदि आप स्थानीय असेंबली से हस्ताक्षर हटाने का जोखिम उठा सकते हैं, तो आवेदन जीएसी में से किसी एक के बजाय इसका उपयोग करेगा।

और अधिक विस्तार से आप शायद कभी, क्रम बाध्यकारी तंत्र के बारे में चाहते सकता है Suzanne Cook's blog देखें

This blog entry from Scott Hanselman बाध्यकारी प्रक्रिया का एक शानदार अवलोकन भी प्रदान करता है।

4

क्या आपको यह जवाब दिखाई दिया?
Forcing the ASP.NET Application to load the assembly from bin not from GAC

ऐसा लगता है जैसे आप एक ही काम करने की कोशिश कर रहे हैं।

+0

ओह मुझे यह जवाब नहीं मिला जब मैंने इस विषय के लिए StackOverFlow की खोज की। लेकिन आप सही हैं, आखिरकार सवाल लगभग वही है। – Flo

-1

सफलतापूर्वक अपने .नेट फ्रेमवर्क आवेदन को तैनात आपको समझना चाहिए आम भाषा क्रम कैसे पता लगाता है और विधानसभाओं कि आपके आवेदन को बनाने के लिए बांधता है। डिफ़ॉल्ट रूप से, रनटाइम उस असेंबली के सटीक संस्करण से जुड़ने का प्रयास करता है जिसके साथ एप्लिकेशन बनाया गया था।कॉन्फ़िगरेशन फ़ाइल सेटिंग्स द्वारा यह डिफ़ॉल्ट व्यवहार ओवरराइड किया जा सकता है।

आप असेंबली बाइंडिंग लॉग व्यूअर (Fuslogvw.exe) का उपयोग कर लॉग फ़ाइल में बाध्यकारी जानकारी देख सकते हैं, जो कि विंडोज सॉफ्टवेयर डेवलपमेंट किट (एसडीके) में शामिल है।

रों

1

आप स्थानीय dll की संस्करण संख्या को बदल सकते हैं, तो आप एक dll संस्करण रीडायरेक्ट oldVersion विशेषता का उपयोग कर सकते हैं। आप स्थानीय विधानसभा के लिए एक मजबूत नाम का उपयोग कर सकते हैं: कृपया इस पेज देखने के लिए: http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx

इसके अलावा, आप पर विचार करना चाहिए कि यह एक संकलित विधानसभा की संस्करण संख्या को संशोधित करने की तरह इसे यहाँ वर्णन किया गया है संभव है: Change Assembly Version in a compiled .NET assembly

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