Nella mia applicazione VB.NET, l'evento AppDomain.CurrentDomain.AssemblyResolve
si è iscritto a un gestore. Il ResolveEventHandler
che è stato sottoscritto a questo evento è stato aggiunto a monte del mio codice (per quello che ne so, System.AppDomain
ha il suo Private Method
iscritto all'evento) ... è possibile rimuovere tutti i gestori da questo evento, in modo che possa aggiungere il mio proprio gestore e assicurarsi che sia il solo uno?E 'possibile rimuovere un EventHandler VB.NET che la tua classe non ha aggiunto?
sostanza che sto cercando di fare questo:
RemoveHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf ClassX.MethodX
Ma io non so che cosa ClassX
o MethodX
sono in questo esempio perché non ho ancora aggiunto un gestore a questo evento, e questo gestore è stato aggiunto dal codice upstream. Sto usando il metodo descritto qui per controllare evento se ogni gestore viene sottoscritto: https://stackoverflow.com/a/2953318/734914
Edit: sono stato in grado di capire quale metodo viene sottoscritto l'evento, utilizzando la finestra immediata durante il debug.
? 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
ora sto cercando di rimuoverlo, in questo modo, perché non è un metodo pubblico:
RemoveHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf GetType(Reflection.Assembly).GetMethod("ResolveAssembly")
ma che dà un errore di compilazione dicendo: "il parametro AddressOf deve essere il nome di una metodo". Quindi io non sono sicuro di come specificare un metodo non pubblico qui
No, non è possibile farlo. –
è questa app winforms o una lib di classe? – Plutonix
il mio codice è in una ClassLibrary caricata da un'applicazione WinForms – plukich