Я работаю над решением Visual Studio VB, которое использует событие AssemblyResolve, отображает сообщение и закрывает приложение, когда оно запускается.
Недавно коллега сообщил, что всякий раз, когда он пытается использовать визуализатор данных во время отладки (эта маленькая кнопка с увеличительным стеклом), отображается вышеупомянутое сообщение, после чего приложение соответствующим образом закрывается.
Вот как мы обрабатываем AssemblyResolve:
Public Sub New()
AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf AppDomain_CurrentDomain_AssemblyResolve
End Sub
Public Shared Function AppDomain_CurrentDomain_AssemblyResolve(ByVal sender As Object, _
ByVal e As ResolveEventArgs) As Assembly
If _blnShuttingDown Then
Return Nothing
End If
MsgBox(String.Format("Unexpected error : " & vbCrLf & vbCrLf & _
"Assembly {0} raised an error" & vbCrLf & vbCrLf & _
"The application is about to shut down. Please contact tech support.", _
e.Name), _
MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, _
SA.DAP.dapMessages.Titre.Erreur)
_blnShuttingDown = True
Application.Exit()
' The compiler needs this.
Return Nothing
End Function
Мы работаем с Visual Studio 2008, в которой ResolveEventArgs
не имеет свойства RequestingAssembly
. Это могло бы пригодиться, но вот, пожалуйста.
Очевидным обходным решением было бы добавить
If e.Name.StartsWith("Microsoft.VisualStudio.Debugger.DataSetVisualizer") Then
Return
End If
в начале метода (возможно, даже с "Microsoft.VisualStudio.Debugger"
).
Я не хочу пытаться принудительно загрузить Microsoft.VisualStudio.Debugger
в начале, потому что чувствую, что это не будет хорошей практикой.
Тем не менее, я не понимаю, почему AssemblyResolve запускается в этот момент. Я понимаю, что это происходит при загрузке сборки выдает ошибку. Что я сделал не так?