2

関数名をフェッチし、エラー レポート パーツのプリセット位置に挿入できる Visual Studio マクロなどを作成したいと考えていました。例を見れば一目瞭然

Class SampleClass
{
    public void FunctionA()
    {
        try
        {
                //Do some work here
        }
        catch (Exception ex)
        {
                Logger.WriteLine(LogLevelEnum.Error, "SampleClass", "FunctionA Failed");
                Logger.WriteLine(LogLevelEnum.Error, "FunctionA", ex.ToString());
        }
        finally
        {
        }
    }
}

そのため、共通ライブラリーの重要な機能のほとんどについて、同様のパターンに従いました。正しい名前を入力することを忘れたり、コピーして貼り付けた後に名前を変更するのを忘れたりする必要がないように、ビルド前のログ セクションに "FunctionA" を挿入できるようにしたいと考えています。ツールバーから手動で呼び出すか、ショートカット キーを使用して呼び出すことができます。

では、どこから始めればよいでしょうか。

注: 私は .Net の中級者と見なされ、C# と VB で 3 年以上書いていますが、マクロについてはまだ未経験です。コード自体と例外について心配する必要はありません。これは単なる例です。

編集: Ovidiu Pacurar と cfeduke に感謝します。私がここで望んでいたのは、変更して忘れる 1 回限りの方法でした。PostSharp は、例外がスローされない場合でも、これらの関数のすべてでオーバーヘッドが発生します。スタックトレースから掘り下げることは可能ですが、ある時点で、スタックトレースの取得にあまり処理を費やさずに「FunctionA Failed」をログに記録したいと考えています。さらに、ライブラリが難読化されている場合、スタックトレースはわかりにくくなります。

実は、この機能には別の必要性がありましたが、それについては前に言及するのを忘れていました。ライブラリを納品する準備ができたら、テーブルを参照して関数名をすべて関数コードに変更したいと考えています。"FunctionA" は "0001" であり、"難読化された" ログの問題を解決します。

4

3 に答える 3

1

System.Diagnostics.StackTrace を見ると、スタックから関数を取得するログ呼び出しを 1 つだけ作成できます。

于 2008-10-30T17:17:23.910 に答える
1

C# に__FILE__and の__LINE__ようなマクロがあればいいのですが、そうではありません。ただし、 PostSharpを使用してプロセス C# をポストコンパイルすることはできます。これには、実行時にメソッド名を取得するためにスタック トレースのオーバーヘッドを呼び出す必要がないという利点があります。パフォーマンスのオーバーヘッドは、例外ハンドラー中に気にする必要はないかもしれませんが、いずれにせよ、PostSharp はジョブを実行できる別のツールです。

PostSharp のサンプル ビデオは、あなたがしようとしていることと同様のことを行います。PostSharp サイトのフロント ページにあるこのサンプル コードを見て、ギアを回してください。

public  class SimplestTraceAttribute : OnMethodBoundaryAspect
{
  public override void OnEntry( MethodExecutionEventArgs eventArgs)
  {
    Trace.TraceInformation("Entering {0}.", eventArgs.Method);
    Trace.Indent();
  }
  public override void OnExit( MethodExecutionEventArgs eventArgs)
  {
    Trace.Unindent();
    Trace.TraceInformation("Leaving {0}.", eventArgs.Method);
  }
}
于 2008-10-30T17:27:51.457 に答える
0

PostSharpを見てください。これにより、非常に簡単な方法でこれを行うことができます。

ロギングのサンプルもあります。

于 2008-10-30T17:26:48.167 に答える