Trong ứng dụng VB.NET của tôi, sự kiện AppDomain.CurrentDomain.AssemblyResolve
có một trình xử lý đã đăng ký với nó. ResolveEventHandler
được đăng ký sự kiện này đã được thêm vào từ mã của tôi (cho tất cả những gì tôi biết, System.AppDomain
có Private Method
riêng của mình được đăng ký sự kiện) ... có thể Xóa tất cả trình xử lý khỏi sự kiện này để tôi có thể thêm xử lý của riêng bạn và đảm bảo đó là chỉ một?Có thể loại bỏ một VB.NET EventHandler mà lớp học của bạn đã không thêm?
Về cơ bản tôi đang cố gắng để làm điều này:
RemoveHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf ClassX.MethodX
Nhưng tôi không biết những gì ClassX
hoặc MethodX
là trong ví dụ này bởi vì tôi chưa thêm một handler cho sự kiện này nêu ra, và handler này đã được thêm vào bởi mã ngược dòng. Tôi đang sử dụng phương pháp mô tả ở đây để kiểm tra sự kiện nếu có xử lý được đăng ký: https://stackoverflow.com/a/2953318/734914
Edit: tôi đã có thể tìm ra những phương pháp được đăng ký với sự kiện này, bằng cách sử dụng cửa sổ ngay khi gỡ lỗi.
? 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
Bây giờ tôi đang cố gắng để loại bỏ nó, như thế này, bởi vì nó không phải là một phương pháp công cộng:
RemoveHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf GetType(Reflection.Assembly).GetMethod("ResolveAssembly")
Nhưng đó đưa ra một lỗi biên dịch nói: "AddressOf tham số phải là tên của một phương pháp". Vì vậy, tôi không chắc chắn làm thế nào để xác định một phương pháp phi công ở đây
Không, không thể thực hiện điều đó. –
là ứng dụng winforms này hay một lớp lib? – Plutonix
mã của tôi là trong một ClassLibrary được nạp bởi một ứng dụng WinForms – plukich