2

我目前正在尝试找出一种方法来节省我的 Visual Studio 解决方案资源管理器中的项目/解决方案/网站可能抛出的编译时间和运行时错误(在数据库表中)。

我在这里先向您的帮助表示感谢。

更新:现在我只想记录 C# 语言的错误。

我正在拼命寻找一种方法或解决方案来实现这一点......任何帮助将不胜感激......

尼克。

4

5 回答 5

5

编译时错误保存在 html 构建日志中,请检查您的输出窗口中的链接。放入数据库应该不会太难。使用此信息的软件是 CruiseControl.Net,因此您可能可以通过查看他们的代码来学习。

对于运行时错误,无法回答。首先,不清楚你在问什么。“运行时错误”是指异常,例如除以零吗?其次,这在 VS 支持的不同语言之间也有很大不同,例如 .NET 语言和直接的 C++。

更新:由于您在 .NET 平台上,我建议您使用捕获所有抛出错误的 try/catch 块包装您的 main 函数,并将您可以从该错误中获得的所有信息记录到您的数据库中(例如堆栈跟踪,异常类型,也许是小型转储)。当然,这不适用于捕获或吞下的错误。如果您还想记录这些(无论出于何种原因),则必须进行一些更聪明的源转换,例如使用反射。一个示例是将日志记录添加到基类 Exception 的构造函数中。

于 2011-04-12T22:31:27.870 回答
1

我的建议是考虑开发视觉工作室的扩展,类似于 Jetbrain 的 Resharper。Visual Studio 公开了一个丰富的 api,用于与 IDE 本身进行交互。如果您在 Visual Studio 之外使用命令行构建,则可能需要将输出通过管道传输到文件并对其进行解析。

以下是一些链接,可帮助您开始开发扩展/加载项:

http://msdn.microsoft.com/en-us/library/dd885119.aspx

http://msdn.microsoft.com/en-us/vstudio/bb968855

这是与错误列表集成的视频链接:

http://msdn.microsoft.com/en-us/vstudio/cc563922

运行时错误可能更容易,因为您可以处理一个 appdomain 异常事件。您可以将处理程序连接到此事件并记录异常。

http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

对于已处理的异常,有几种技术。Microsoft 有一个可以使用的异常处理块,或者您可以创建一个在整个应用程序中使用的自定义异常类型。

于 2011-06-08T03:21:55.007 回答
0

听起来你想要一个网站。您可以创建一个全局类 (Global.asax.vb),然后在 Application_Error 事件中处理错误。这是您处理任何未处理异常的地方(vb 示例就是我所拥有的):

    Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
    ' Fires when an error occurs
    Dim appException As System.Exception = Server.GetLastError()
    Dim tempException As System.Exception = Nothing

    If appException Is Nothing Then
        Return
    End If

    tempException = appException.InnerException

tempException 将保存未处理的异常,您可以将其存储在数据库中,或通过电子邮件将其发送给某人。你的选择。

您可以通过处理应用程序事件中的 _unhandledException 事件在 winform 应用程序中执行非常类似的操作。

于 2011-06-09T04:46:11.203 回答
0

Visual Studio 项目文件是可以包含自定义编译步骤的 MSBuild 文件。也许可以用调用 CSharp 编译器并记录错误的自定义步骤替换编译步骤。

如果您向我们提供更多关于您想要使用它的信息,也许我们可以提供替代解决方案。例如,您是否需要从 Visual Studio 内部记录错误,还是让外部工具记录这些错误就足够了?

于 2011-06-09T11:44:31.503 回答
0

只有 C++ 编译器会生成构建日志。C# 没有。您将不得不走插件/扩展路线(在这种情况下,使用 Dave Ferguson 的建议开始)或者您可以使用命令行编译 (csc.exe) 并将输出通过管道传输到文件 (csc.exe / options >> log.txt),然后解析它。

于 2011-06-09T15:48:49.637 回答