【问题标题】:Insert Function Name during PreBuild在 PreBuild 期间插入函数名称
【发布时间】:2008-10-30 17:11:03
【问题描述】:

我想编写一个 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 年多,但我对 Macro 很陌生,不过不介意学习。 不用担心代码本身和异常,这只是一个例子。

编辑: 感谢 Ovidiu Pacurar 和 cfeduke。我在这里想要的是一种一次性的改变和忘记的方法。 PostSharp 将在这些函数中的每一个上产生开销,即使没有抛出异常也是如此。从堆栈跟踪中挖掘是可行的,但在某些时候,我也想只记录“FunctionA Failed”,而不需要花费太多处理来获取堆栈跟踪。此外,如果库被混淆,堆栈跟踪将是神秘的。

实际上,这个功能还有另一个需要,我之前忘记提到了。当库准备好交付时,我想将所有函数名改为函数代码,“FunctionA”可能是“0001”,通过引用一个表来解决“混淆”日志问题。

【问题讨论】:

    标签: .net macros compilation


    【解决方案1】:

    查看 System.Diagnostics.StackTrace,然后您可以只创建一个日志调用,从堆栈中获取函数。

    【讨论】:

      【解决方案2】:

      我希望 C# 有类似 __FILE____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);
        }
      }
      

      【讨论】:

        【解决方案3】:

        看看PostSharp。它可以让您以非常简单的方式做到这一点,而且更多。

        也有带日志的示例。

        【讨论】:

          猜你喜欢
          • 2016-07-17
          • 2019-03-05
          • 2023-02-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-28
          • 1970-01-01
          • 2014-06-08
          相关资源
          最近更新 更多