有什么方法可以在不修改程序集的情况下找出程序集是否已使用 TRACE 或 DEBUG 标志集进行编译?
5 回答
唯一最好的方法是检查编译的程序集本身。Rotem Bloom在这里找到了一个非常有用的工具,称为“.NET 程序集信息” 。安装后,它会关联 .dll 文件以自行打开。安装后,您只需双击程序集即可打开它,它将为您提供程序集详细信息,如下面的屏幕商店中所示。在那里您可以确定它是否已调试编译。
替代文字 http://ruchitsurati.net/myfiles/asm_info.jpg
(来源:ruchitsurati.net)
链接文本:http : //www.codeplex.com/AssemblyInformation
如何以编程方式检测程序集是否在调试或发布模式下编译,来自 Scott Hanselman。
static bool IsDebug(){
bool rv = false;
#if DEBUG
rv = true;
#endif
return rv;
}
可能没有通用的方法。但是,您可以查找对命名空间的引用Assert
和Debug
来自System.Diagnostics
命名空间的引用。这些的存在将表明已设置 DEBUG 标志。
Trace
TRACE 标志也是如此。
显然,如果源代码不使用这些命名空间中的类型,这将不起作用。
上面提到的“IsDebug”应用程序实际上有一个错误,它没有反映正确的 DubuggableAttributes。它错误地假定如果 DebuggableAttribute 存在,则程序集不是 JIT 优化的。我在我的博客上提供了正确的实现: