C#如何检测使用的构建模式

rok*_*rok 2 c# visual-studio-2013

我有一个内置的应用程序VS2013(写入C#),我怎么知道它是在Debug或Release模式下构建的?是否足以检查文件.pdb是否存在?这不是C#if/then指令调试vs发布的重复..假设我没有源代码,只有编译文件,查看它们是否有可能确定构建模式?我可以只查找.pdb文件吗?

Eri*_*ert 5

我怎么知道它是在Debug还是Release模式下构建的?是否足以检查文件.pdb是否存在?

在调试模式下构建通常需要三件事:

  • 优化已禁用
  • 发布PDB
  • DEBUG预处理器符号已定义

我说"通常",因为没有要求任何这些事情一直发生; 例如,可以在没有优化的情况下发出PDB.

你没有说你感兴趣的这三件事中的哪一件,或者为什么.我将描述如何检测第一个:是否已禁用优化构建的程序集?

最简单的方法是在程序集上运行ILDASM并检查任何方法的IL.禁用优化的方法将nop始终包含说明.这些是"无操作"指令,什么都不做; 它们的存在只是为了通过提供开发人员可以放置断点的更多位置来使代码更容易调试.

例如,禁用优化的"hello world"方法的IL是:

nop
ldstr      "Hello world"
call       void [mscorlib]System.Console::WriteLine(string)
nop
ret
Run Code Online (Sandbox Code Playgroud)

但是在启用优化的情况下,nops就会消失.

如果您对检测调试与发布模式的其他方法感兴趣,请参阅此重复问题中的链接:

以编程方式检测发布/调试模式(.NET)