如何确定DLL是debugging还是发布版本(在.NET中)

可能重复:
如何判断.NET应用程序是以DEBUG还是RELEASE模式编译?

我确信之前已经问过这个问题,但谷歌和SOsearch失败了我。

我怎样才能确定一个DLL是一个发布版本或debugging版本?

唯一最好的方法是检查编译的程序集本身。 Rotem Bloom 在这里find了这个非常有用的工具叫做“.NET Assembly Information”。 安装完成后,它会将自己与.dll文件关联起来以便自己打开。 安装完成后,只需双击打开的程序集,它将为您提供程序集详细信息,如下面的屏幕截图所示。 在那里你可以确定它是否被debugging编译。

替代文字http://ruchitsurati.net/myfiles/asm_info.jpg

替代文字http://ruchitsurati.net/myfiles/release_assembly.PNG

LinkText: http : //www.codeplex.com/AssemblyInformation

希望这可以帮助..

恕我直言,上述申请是真的误导; 它只查找IsJITTrackingEnabled,它完全独立于代码是否被编译进行优化和JIT优化。

如果您在发布模式下编译DebuggableAttribute,并selectDebugOutput除“none”以外的其他任何内容。

您还需要准确定义“debugging”与“发布”的含义。

你的意思是应用程序configuration了代码优化? 你的意思是你可以附加VS / JITdebugging器吗? 你的意思是它产生DebugOutput? 你的意思是它定义了DEBUG常量? 请记住,您可以使用System.Diagnostics.Conditional()属性有条件地编译Methods。

恕我直言,当有人问一个程序集是否是“debugging”或“释放”,他们的真正意思是如果代码优化…

Sooo,你想这样做手动或编程?

手动 :您需要查看程序集元数据的DebuggableAttribute位掩码的值。 以下是如何做到这一点:

  1. 在ILDASM中打开程序集
  2. 打开清单
  3. 看看DebuggableAttribute位掩码。 如果DebuggableAttribute不存在,那肯定是一个优化的程序集。
  4. 如果存在,请查看第4个字节 – 如果是“0”,则为“JIT优化” – 否则,不是:

//元数据版本:v4.0.30319 …. // .custom实例无效[mscorlib] System.Diagnostics.DebuggableAttribute ::。ctor(valuetype [mscorlib] System.Diagnostics.DebuggableAttribute / DebuggingModes)=(01 00 02 00 00 00 00 00)

以编程方式 :假设您想以编程方式知道代码是否JITOptimized,这里是正确的实现:

object[] attribs = ReflectedAssembly.GetCustomAttributes(typeof(DebuggableAttribute), false); // If the 'DebuggableAttribute' is not found then it is definitely an OPTIMIZED build if (attribs.Length > 0) { // Just because the 'DebuggableAttribute' is found doesn't necessarily mean // it's a DEBUG build; we have to check the JIT Optimization flag // ie it could have the "generate PDB" checked but have JIT Optimization enabled DebuggableAttribute debuggableAttribute = attribs[0] as DebuggableAttribute; if (debuggableAttribute != null) { HasDebuggableAttribute = true; IsJITOptimized = !debuggableAttribute.IsJITOptimizerDisabled; BuildType = debuggableAttribute.IsJITOptimizerDisabled ? "Debug" : "Release"; // check for Debug Output "full" or "pdb-only" DebugOutput = (debuggableAttribute.DebuggingFlags & DebuggableAttribute.DebuggingModes.Default) != DebuggableAttribute.DebuggingModes.None ? "Full" : "pdb-only"; } } else { IsJITOptimized = true; BuildType = "Release"; } 

我在我的博客上提供了这个实现:

如何判断程序集是debugging还是发布