Почему VisualStudio DataSet Visualizer запускает событие AssemblyResolve? - PullRequest
0 голосов
/ 14 октября 2019

Я работаю над решением 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 запускается в этот момент. Я понимаю, что это происходит при загрузке сборки выдает ошибку. Что я сделал не так?

...