今天看了如何判断Assembly是Debug还是Release?这篇文章,收获很大,但是这个方法还是有自己的缺陷,使用这个方法必须保证这个DLL或者EXE程序参照自己的这个方法来实现?有没有办法判断这个程序是Debug版本的还是Release版本的呢?
在Win32环境下,一般来讲,由于大量的编译信息会保存在Exe或DLL文件中,因此这些文件的size都会比较大,我一般来判断这个文件是DLL还是Release版本都是通过对二进制码的分析得到的。
Debug版本的程序中一般都会保存PDB文件的保存路径,因此我就用这个方法来判断是不是Debug:)
在Dotnet环境下,Framework提供了一个DebuggableAttribute 的class,可以通过如下的代码实现对其编译属性的判断。
try
{
Cursor = Cursors.WaitCursor;
Assembly assm = Assembly.LoadFrom(filename);
bool found = assm.GetCustomAttributes(typeof(DebuggableAttribute), false).Length > 0;
buildType = found ? "Debug" : "Release";
}
catch
{
buildType = "<error>";
}
finally
{
Cursor = Cursors.Default;
}
出处:http://www.sliver.com/dotnet/IsDebug/
程序下载(code):http://www.sliver.com/dotnet/IsDebug/IsDebugSource.zip