現在、Visual Studio ソリューション エクスプローラーのプロジェクト/ソリューション/Web サイトがスローする可能性のあるコンパイル時間と実行時エラー (データベース テーブル内) を節約する方法を見つけようとしています。
事前に助けてくれてありがとう。
更新:今のところ、C# 言語のエラーのみをログに記録したいと思います。
これを実装する方法または解決策を必死に探しています...どんな助けでも大歓迎です...
NiK.
現在、Visual Studio ソリューション エクスプローラーのプロジェクト/ソリューション/Web サイトがスローする可能性のあるコンパイル時間と実行時エラー (データベース テーブル内) を節約する方法を見つけようとしています。
事前に助けてくれてありがとう。
更新:今のところ、C# 言語のエラーのみをログに記録したいと思います。
これを実装する方法または解決策を必死に探しています...どんな助けでも大歓迎です...
NiK.
コンパイル時のエラーはhtmlビルドログに保存されます。出力ウィンドウでリンクを確認してください。データベースに入れるのはそれほど難しいことではありません。この情報を使用するソフトウェアはCruiseControl.Netであるため、コードを確認することでおそらく学ぶことができます。
ランタイムエラーの場合、答えることは不可能です。まず第一に、あなたが何を求めているのかははっきりしていません。「ランタイムエラー」とは、ゼロ除算などの例外を意味しますか?第2に、これはVSでサポートされているさまざまな言語(.NET言語やストレートC ++など)間でも大きく異なります。
更新:.NETプラットフォームを使用しているため、スローされたすべてのエラーをキャッチするtry / catchブロックでメイン関数をラップし、そのエラーから取得できるすべての情報をデータベース(スタックなど)に記録することをお勧めします。トレース、例外の種類、おそらくミニダンプ)。もちろん、これは、キャッチまたは飲み込まれたエラーでは機能しません。(何らかの理由で)それらもログに記録したい場合は、たとえばリフレクションを使用して、より巧妙なソース変換を行う必要があります。例として、基本クラスExceptionのコンストラクターにロギングを追加します。
私の提案は、Jetbrain の Resharper に似た、ビジュアル スタジオの拡張機能の開発を検討することです。Visual Studio は、IDE 自体とやり取りするための豊富な API を公開しています。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 には、使用できる例外処理ブロックがあります。または、アプリケーション全体で使用するカスタム例外タイプを作成することもできます。
Visual Studio プロジェクト ファイルは、カスタム コンパイル ステップを含むことができる MSBuild ファイルです。おそらく、コンパイル ステップを、CSharp コンパイラを呼び出してエラーをログに記録するカスタム ステップに置き換えることができます。
何に使用したいかについてもう少し情報を提供していただければ、別の解決策を提供できるかもしれません。たとえば、Visual Studio 内からエラーをログに記録する必要がありますか、それとも外部ツールにこれらのエラーをログに記録させるだけで十分ですか?
ビルドログを作成するのは C++ コンパイラだけです。C# にはありません。プラグイン/拡張ルートを使用する必要があります (この場合、Dave Ferguson の提案を使用して開始します)、またはコマンド ラインを使用してコンパイル (csc.exe) し、出力をファイルにパイプします (csc.exe / options >> log.txt)、それを解析します。
Web サイトにこれが必要なようですね。グローバル クラス (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 は未処理の例外を保持し、それをデータベースに保存するか、誰かに電子メールで送信できます。あなたの選択。
Application イベントで _unhandledException イベントを処理することにより、winform アプリで非常によく似たことができます。