2010-12-02 15 views
6

मेरे पास दो असेंबली हैं ए और बी ए मजबूत नाम है और बी नहीं है।प्रतिबिंब का उपयोग कर एक हस्ताक्षरित असेंबली से एक हस्ताक्षरित असेंबली में प्रकार लोड करना क्यों संभव है?

MSDN के अनुसार मैं बी से संदर्भ नहीं दे सकता क्योंकि एक मजबूत नामित असेंबली केवल एक और मजबूत नामित असेंबली का संदर्भ दे सकती है।

लेकिन फिर असेंबली बी लोड करना क्यों संभव है, अपनी कक्षा को तुरंत चालू करें और प्रतिबिंब का उपयोग करके असेंबली ए से अपने तरीकों को कॉल करें?

// Inside assembly A 
Assembly b = Assembly.LoadFrom("B"); 
obj myObj = b.CreateInstance("MyClass"); 

क्या यह हस्ताक्षर किए गए हस्ताक्षर किए गए असेंबली को संदर्भित करने की इजाजत देने का उद्देश्य नहीं है?

+2

क्या आपने कोशिश की है? –

+0

@ लोगन - मैंने –

उत्तर

8

ठीक है, आपको समझना होगा कि मजबूत नामित असेंबली को "डीएलएल नरक" को रोकने के लिए डिज़ाइन किया गया है और "साइड-बाय-साइड वर्जनिंग" की अनुमति है। AFAIK यह सुरक्षा के लिए डिज़ाइन नहीं किया गया है।

इसलिए, आपको विधियों को कॉल करने और हस्ताक्षरित असेंबली में कक्षाओं को तुरंत चालू करने के लिए एक मजबूत नामित असेंबली में प्रतिबिंब का उपयोग करने की अनुमति है। ढांचा आपको लगता है कि आप क्या कर रहे हैं क्योंकि आप स्पष्ट रूप से एक फाइल लोड कर रहे हैं - और इसलिए आपको पता होना चाहिए कि आप वास्तव में कौन सी फाइल चाहते हैं। दूसरे शब्दों में, आप ढांचे को बता रहे हैं: "इस असेंबली के लिए, मैं अपना खुद का संस्करण प्रबंधित करना चाहता हूं।"

+1

प्रश्न को अद्यतन किया है, निश्चित रूप से एक मजबूत नामित असेंबली के लिए एक सुरक्षा घटक है [अंतर क्या है, भाग पांच: प्रमाणपत्र हस्ताक्षर बनाम मजबूत नामकरण] (http://blogs.msdn.com/b/ ericlippert/संग्रह/2009/09/03/क्या-एस-अंतर-पार्ट-पांच प्रमाण पत्र पर हस्ताक्षर-बनाम-मजबूत naming.aspx)। असल में यह आपको एक असेंबली की पहचान की पुष्टि करने की अनुमति देता है। उस मैलवेयर के बिना आसानी से एक विश्वसनीय असेंबली को प्रतिस्थापित कर सकता है। इसके अलावा ओपी को * पूरी तरह भरोसेमंद असेंबली का उपयोग करना चाहिए * प्रतिबिंब का उपयोग करके उदाहरण बनाने के लिए केवल दृढ़ता से नामित नहीं। –

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