【发布时间】:2023-03-03 18:46:01
【问题描述】:
我在 VB.NET 中创建了一个项目。如果我创建的应用程序会产生不需要的错误,它将创建一个包含错误的文本文件。我在 Visual Studio 上运行它时能够做到这一点,但在运行单独的应用程序时它不起作用,在 bin/Debug 上找到的可执行文件。
这是我所做的:
Sub Main(ByVal ParamArray args() As String)
Try
System.Windows.Forms.Application.Run(New Form1)
Catch ex As Exception
WriteErrorLogs(ex)
End Try
End Sub
Sub WriteErrorLogs(Byval ex As Exception)
' create a textfile the write x.Message, x.Source, x.ToString
Dim dnow As String = Now.ToString
Dim filename As String = "Error " & removeInvalidChars(dnow)
Dim saveto As String = New IO.FileInfo("Errors/" & filename).FullName & ".txt"
Dim title As String = ex.Message
Dim stacktrce As String = ex.StackTrace
If Not IO.Directory.Exists(New IO.DirectoryInfo("Errors").FullName) Then IO.Directory.CreateDirectory("Errors")
Dim fw As New IO.StreamWriter(saveto, False, System.Text.Encoding.UTF8)
fw.WriteLine(title)
fw.WriteLine()
fw.WriteLine(stacktrce)
fw.Close()
End Sub
Private Function removeInvalidChars(ByRef s As String)
Dim invalidChars() As Char = "\/:*?""<>|".ToCharArray
For Each i As Char In invalidChars
s = s.Replace(i, ".")
Next
Return s
End Function
有没有更好的解决方案?
【问题讨论】:
-
WriteErrorLogs方法中的代码在哪里? -
不清楚您在这里寻求帮助的内容。您要写入的文件在哪里?是您无法写入文本文件的问题,还是更多关于错误处理最佳实践的查询?
-
此外,还有很多方法可以处理日志记录。在this answer我详细说明了
log4net。 -
您必须小心
WriteErrorLogs中的代码不会也抛出错误。例如,如果它试图写入 C:\ 驱动器的根目录,这可能会失败。 -
(已完成代码)我的问题是 Try Catch 错误陷阱在未处于调试模式时不起作用。假设 Form1 有一个调用错误的按钮。将在 Sub Main 上的 Catch 上引发错误。现在,我想知道是否有更好的解决方案,而不是使用 Try Catch 错误陷阱,因为它不适用于已部署的应用程序。
标签: .net vb.net error-handling