我目前正在尝试找出一种方法来节省我的 Visual Studio 解决方案资源管理器中的项目/解决方案/网站可能抛出的编译时间和运行时错误(在数据库表中)。
我在这里先向您的帮助表示感谢。
更新:现在我只想记录 C# 语言的错误。
我正在拼命寻找一种方法或解决方案来实现这一点......任何帮助将不胜感激......
尼克。
我目前正在尝试找出一种方法来节省我的 Visual Studio 解决方案资源管理器中的项目/解决方案/网站可能抛出的编译时间和运行时错误(在数据库表中)。
我在这里先向您的帮助表示感谢。
更新:现在我只想记录 C# 语言的错误。
我正在拼命寻找一种方法或解决方案来实现这一点......任何帮助将不胜感激......
尼克。
编译时错误保存在 html 构建日志中,请检查您的输出窗口中的链接。放入数据库应该不会太难。使用此信息的软件是 CruiseControl.Net,因此您可能可以通过查看他们的代码来学习。
对于运行时错误,无法回答。首先,不清楚你在问什么。“运行时错误”是指异常,例如除以零吗?其次,这在 VS 支持的不同语言之间也有很大不同,例如 .NET 语言和直接的 C++。
更新:由于您在 .NET 平台上,我建议您使用捕获所有抛出错误的 try/catch 块包装您的 main 函数,并将您可以从该错误中获得的所有信息记录到您的数据库中(例如堆栈跟踪,异常类型,也许是小型转储)。当然,这不适用于捕获或吞下的错误。如果您还想记录这些(无论出于何种原因),则必须进行一些更聪明的源转换,例如使用反射。一个示例是将日志记录添加到基类 Exception 的构造函数中。
我的建议是考虑开发视觉工作室的扩展,类似于 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.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 应用程序中执行非常类似的操作。
Visual Studio 项目文件是可以包含自定义编译步骤的 MSBuild 文件。也许可以用调用 CSharp 编译器并记录错误的自定义步骤替换编译步骤。
如果您向我们提供更多关于您想要使用它的信息,也许我们可以提供替代解决方案。例如,您是否需要从 Visual Studio 内部记录错误,还是让外部工具记录这些错误就足够了?
只有 C++ 编译器会生成构建日志。C# 没有。您将不得不走插件/扩展路线(在这种情况下,使用 Dave Ferguson 的建议开始)或者您可以使用命令行编译 (csc.exe) 并将输出通过管道传输到文件 (csc.exe / options >> log.txt),然后解析它。