1

我正在开发一个使用 AssemblyResolve 事件的 Visual Studio VB 解决方案,显示一条消息并在应用程序被触发时关闭它。

最近,一位同事报告说,每当他在调试期间尝试使用 Data Visualizer(那个漂亮的小放大镜按钮)时,都会显示上述消息,之后应用程序会相应地关闭。

这就是我们处理 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

我们使用ResolveEventArgs没有该RequestingAssembly属性的 Visual Studio 2008。它可能有用,但你去吧。

一个明显的解决方法是添加

        If e.Name.StartsWith("Microsoft.VisualStudio.Debugger.DataSetVisualizer") Then
            Return
        End If

在方法的开头(甚至可能只是"Microsoft.VisualStudio.Debugger")。

我不想Microsoft.VisualStudio.Debugger在一开始就尝试强制加载,因为我觉得这不是一个好习惯。

不过,我不明白为什么 AssemblyResolve 会在那时被解雇。我知道在加载程序集产生错误时会发生这种情况。我做错了什么?

4

0 回答 0