如何从编译的引用lib中判断调用程序集是否处于DEBUG模式

时间:2010-10-07 09:32:14

标签: c#

我有一个引用的库,如果引用它的程序集处于DEBUG / RELEASE模式,我想在其中执行不同的操作。

是否可以打开调用程序集处于DEBUG / RELEASE模式的条件?

有没有办法做到这一点,而不诉诸于:

bool debug = false;

#if DEBUG
debug = true;
#endif

referencedlib.someclass.debug = debug;

引用程序集始终是应用程序的起点(即Web应用程序。

3 个答案:

答案 0 :(得分:9)

Google says这很简单。您可以从相关程序集的DebuggableAttribute获取信息:

IsAssemblyDebugBuild(Assembly.GetCallingAssembly());

private bool IsAssemblyDebugBuild(Assembly assembly)
{
    foreach (var attribute in assembly.GetCustomAttributes(false))
    {
        var debuggableAttribute = attribute as DebuggableAttribute;
        if(debuggableAttribute != null)
        {
            return debuggableAttribute.IsJITTrackingEnabled;
        }
    }
    return false;
}

答案 1 :(得分:2)

接受的答案是正确的。这是一个跳过迭代阶段的替代版本,作为扩展方法提供:

public static class AssemblyExtensions
{
    public static bool IsDebugBuild(this Assembly assembly)
    {
        if (assembly == null)
        {
            throw new ArgumentNullException(nameof(assembly));
        }

        return assembly.GetCustomAttribute<DebuggableAttribute>()?.IsJITTrackingEnabled ?? false;
    }
}

答案 2 :(得分:1)

您可以使用reflection获取调用程序集并使用this method检查它是否处于调试模式。