在运行时检测您是否正在运行调试程序或发布可执行文件

时间:2019-06-25 10:51:17

标签: c# .net debugging

我有一个库,它将以发布模式下的nuget包的形式构建和发布。

但是,出于调试目的,在各个点捕获堆栈跟踪很有用。

捕获堆栈跟踪相对昂贵,我不想在发行版中进行。但是,我也不想强迫所有人在调试代码时用调试版本替换我的nuget软件包。

是否可以检查运行dll的可执行文件是否已通过调试或发布进行编译?换句话说,即使我的nuget软件包是用release编译的,我还是要运行不同的代码,这取决于使用我的库的可执行文件是在release还是debug中构建的?

1 个答案:

答案 0 :(得分:1)

以下几行似乎相互冲突:

  

是否可以检查运行dll的可执行文件是否为   用调试或发布进行编译?换句话说,即使我的裸体   程序包已发布,我想运行不同的代码

通常可以通过使用pre-processor directives来完成与您要做的事情类似的事情。这将使您的程序能够根据例如用于构建项目的配置名称执行不同的路径:

#if debug
    //Log
#endif

但是,您似乎在追求不同的东西。看来您想更改行为,但要保持相同的内部版本(两种情况都发布)。

为此,可能会有一个标记,例如说verbose,默认情况下为false,并启用它会记录额外的信息。这样一来,您可以保持相同的构建机制,但可以相应地记录更多信息。

编辑:根据您的评论,我的意思是这样的:

在调用nuget的代码中,您将遇到类似这样的情况:

#if DEBUG
    var x = new NugetInstance(verbose:true...);
#else 
    var x = new NugetInstance(verbose:false...);
#endif