我有一个引用的库,如果引用它的程序集处于DEBUG / RELEASE模式,我想在其中执行不同的操作。
是否可以打开调用程序集处于DEBUG / RELEASE模式的条件?
有没有办法做到这一点,而不诉诸于:
bool debug = false;
#if DEBUG
debug = true;
#endif
referencedlib.someclass.debug = debug;
引用程序集始终是应用程序的起点(即Web应用程序。
答案 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检查它是否处于调试模式。