我有一个应用程序,我在其中使用 TraceListener 在应用程序执行时收集数据/调试信息。同时有多个监听器,其中一个会将跟踪信息写入磁盘文件,另一个可能会以字符串形式收集(短期执行)然后显示给用户,也可能保存到另一个文件中根据需要。
一切都很顺利,除非我们做出其他决定。
我们有很多在运行时加载并执行的插件。然而,问题是插件DLL因为它被应用程序使用,所以很难替换它,所以我们不得不停止并替换DLL,然后重新启动它。我们决定使用 appDomain 来加载插件,这样我们就可以轻松地替换 DLL 而无需重新启动应用程序。这也很顺利,但出现了一个主要问题。跟踪听众是盲目的。由于插件被加载到不同的应用程序域,所以跟踪永远不会到达正在监听它的父应用程序域(插件所做的跟踪,它被加载到新的应用程序域)。
我们的跟踪监听器看起来像这样。
Public Class StringTraceListener
Inherits TextWriterTraceListener
Dim sw As System.Text.StringBuilder = Nothing
Public Overrides Sub WriteLine(ByVal message As String)
Try
MyBase.WriteLine(message)
sw.AppendLine(Now.ToString & " : " & message)
Catch ex As Exception
'Do not write anything here... or it might go into recursive loop
End Try
End Sub
我想知道,是否有一种方法我们不必进行太多更改,并且跟踪侦听器也可以从插件(子 appDomain)接收跟踪?任何想法将不胜感激谢谢