今天看了如何判断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