繁体   English   中英

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

[英]How to tell if calling assembly is in DEBUG mode from compiled referenced lib

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

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

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

bool debug = false;

#if DEBUG
debug = true;
#endif

referencedlib.someclass.debug = debug;

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

谷歌说这很简单。 您从相关程序集的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;
}

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

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;
    }
}

您可以使用反射来获取调用程序集,并使用此方法检查它是否处于调试模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM