如何确定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位掩码的值。 以下是如何做到这一点:
- 在ILDASM中打开程序集
- 打开清单
- 看看DebuggableAttribute位掩码。 如果DebuggableAttribute不存在,那肯定是一个优化的程序集。
- 如果存在,请查看第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还是发布