मेरे वीबी.नेट आवेदन में, ईवेंट AppDomain.CurrentDomain.AssemblyResolve
में एक हैंडलर सदस्यता लेता है। इस घटना की सदस्यता लेने वाले ResolveEventHandler
को मेरे कोड से अपस्ट्रीम जोड़ा गया था (मुझे पता है कि System.AppDomain
के पास Private Method
इवेंट की सदस्यता है) ... क्या इस घटना से सभी हैंडलर को निकालना संभव है, ताकि मैं अपना जोड़ सकूं अपने हैंडलर और सुनिश्चित करें कि यह केवल एक है?क्या एक वीबी.नेट इवेंट हैंडलर को निकालना संभव है जिसे आपकी कक्षा नहीं जोड़ा गया है?
अनिवार्य रूप से मैं यह करने के कोशिश कर रहा हूँ:
RemoveHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf ClassX.MethodX
लेकिन मैं इस उदाहरण में नहीं पता है कि ClassX
या MethodX
हैं क्योंकि मुझे नहीं अभी तक इस घटना के लिए कोई हैंडलर को शामिल किया है, और इस हैंडलर अपस्ट्रीम कोड द्वारा जोड़ा गया था। मैं यदि कोई हैंडलर सदस्यता लिया है घटना की जांच करने के विधि यहाँ वर्णित उपयोग कर रहा हूँ: https://stackoverflow.com/a/2953318/734914
संपादित करें: मैं कौन सी विधि घटना की सदस्यता दी गई, तत्काल विंडो का उपयोग करते समय डिबगिंग यह पता लगाने में सक्षम था।
? DirectCast(gettype(System.AppDomain).GetField("AssemblyResolve", BindingFlags.Instance or BindingFlags.NonPublic).GetValue(AppDomain.CurrentDomain) , ResolveEventHandler)
{System.ResolveEventHandler}
_methodBase: Nothing
_methodPtr: 157334028
_methodPtrAux: 1827519884
_target: {System.ResolveEventHandler}
**Method: {System.Reflection.Assembly ResolveAssembly**(System.Object, System.ResolveEventArgs)}
Target: Nothing
अब मैं, इसे हटाने के लिए, इस तरह कोशिश कर रहा हूँ, क्योंकि यह एक सार्वजनिक विधि नहीं है:
RemoveHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf GetType(Reflection.Assembly).GetMethod("ResolveAssembly")
लेकिन यह एक संकलक त्रुटि कह देता है: "AddressOf पैरामीटर के नाम होना चाहिए तरीका"। तो मुझे यकीन है कि मूल टिप्पणी से एक गैर सार्वजनिक विधि यहाँ
नहीं, ऐसा करना संभव नहीं है। –
क्या यह Winforms ऐप या क्लास lib है? – Plutonix
मेरा कोड क्लास लाइब्रेरी में है जो WinForms एप्लिकेशन – plukich