如何在Visual Studio 2008/2010中捕获和保存我的解决方案项目的编译时和运行时错误

本文关键字:解决方案 我的 保存 项目 运行时错误 编译 Visual Studio 2008 2010 | 更新日期: 2023-09-27 17:50:14

我目前正试图找出一种方法,我如何可能节省编译时间和运行时错误(在数据库表),项目/解决方案/网站在我的visual studio解决方案资源管理器可能会抛出。

提前感谢您的帮助。

Update:目前我只想记录c#语言的错误。

我正在拼命寻找一种方法或解决方案来实现这个…如有任何帮助,我将不胜感激。

尼克。

如何在Visual Studio 2008/2010中捕获和保存我的解决方案项目的编译时和运行时错误

编译时错误保存在html buildlog中,查看输出窗口中的链接。应该不会太难放到数据库中。CruiseControl就是一个使用这些信息的软件。所以你可以从他们的代码中学习。

对于运行时错误,无法回答。首先,我不清楚你在问什么。通过"运行时错误",您是指异常(例如除以零)吗?其次,这在VS中支持的不同语言之间也有很大的不同,例如。net语言和直接的c++。

更新:因为你是在。net平台上,我建议你要么包装你的主函数与一个try/catch块捕获所有抛出的错误,只是记录所有的信息,你可以从该错误到你的数据库(如堆栈跟踪,异常类型,也许是一个minidump)。当然,这不适用于捕获或吞食的错误。如果您还想记录这些日志(无论出于什么原因),您将不得不进行一些更聪明的源转换,例如通过使用反射。例如,将日志记录添加到基类Exception的构造函数中。

我的建议是考虑开发一个visual studio的扩展,类似于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有一个可以使用的异常处理块,或者您可以创建一个您在整个应用程序中使用的自定义异常类型。

听起来你想要一个网站。您可以创建一个Global类(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将保存未处理的异常,您可以将其存储在数据库中,或通过电子邮件发送给某人。你的选择。

您可以在winform应用程序中通过处理应用程序事件中的_unhandledException事件来做类似的事情。

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

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

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