如何判断Assembly是Debug还是Release?

在拿到一个Assembly文件(.dll、.exe)的时候,如何才能迅速判断这个文件是使用Debug模式还是Release模式编译出来的呢?

在项目的AssemblyInfo.cs文件中,使用这样一个技巧:

#if DEBUG
[assembly: AssemblyDescription("Debug")]
#else
[assembly: AssemblyDescription("Release")]
#endif


编译出来Assembly文件以后,只要直接察看文件的属性,就可以看出来了:



如果要在程序中取得这个信息,可以使用:

Object[] attrs = System.Reflection.Assembly.GetExecutingAssembly().
    GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
if (attrs.Length > 0)
{
    String sCompMode = (attrs[0] as AssemblyDescriptionAttribute).Description;
}


来得到这个信息。

Source : http://weblogs.asp.net/tgraham/archive/2004/06/16/157545.aspx

补充:Lostinet说出可以使用“System.Diagnostics.DebuggableAttribute”这个Attribute来判断一个Assembly是否是Debug模式编译的。但是,在这里C# 1.1编译器有一个“Bug”:

不管当前的Assembly是否是Debug模式编译的,C# 1.1的编译器csc.exe都会给Assembly加上“System.Diagnostics.DebuggableAttribute”,而指定“/optimize”参数时,csc.exe才不加。就是说,我们即使不启用Debug来进行编译:

“csc some.cs /debug-”,也会给编译出来的Assembly加上DebuggableAttribute;

“csc some.cs /debug- /optimize”,这样才不会加上DebuggableAttribute。

但是,幸运的是,VS.NET开发环境只要是Release模式编译,都会自动给csc.exe加上“/optimize”参数,所以...从这点上来讲,只要Assembly是在VS.NET里面编译的,这个方法还是有效的。

你可能感兴趣的:(assembly)