我正在开发一个使用 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 会在那时被解雇。我知道在加载程序集产生错误时会发生这种情况。我做错了什么?