我有一个类库,如果主机程序集在调试中,我想登录到System.Diagnostics(我的类库自从nuget下载后始终处于发行版中)。
试过这个
var debug =
Assembly.GetEntryAssembly()
.GetCustomAttributes()
.OfType<DebuggableAttribute>()
.Any(a => a.IsJITTrackingEnabled);
问题是GetEntryAssembly返回null,并且Executing和Calling assmebly方法都返回我的类库,它总是在如上所述的releae中
如果主机程序集在调试中,如何从发布中构建的类库中确定任何想法?
edit:
在进行投票时,请说明原因。无论如何,
当您使用IIS Express而不是IIS时,Enviroment.UserInteractive返回true,因此它几乎是我想要的。但您也可以使用IIS来托管您的调试环境,然后它将无法正常工作。任何想法如何检测主机是否在调试?
编辑:这就是我现在的工作,但不是100%的防弹,如果从IIS调试就无法工作(仅适用于IIS Express的调试)
public class BusinessContext : IBusinessContext
{
private readonly DbContext _db;
private static readonly bool Debug;
static BusinessContext()
{
Debug = Environment.UserInteractive; //User is probably in debug from VS with IIS express
//Assembly.GetEntryAssembly()
//.GetCustomAttributes()
//.OfType<DebuggableAttribute>()
//.Any(a => a.IsJITTrackingEnabled);
}
public BusinessContext(DbContext db)
{
_db = db;
if (Debug)
_db.Database.Log = sql => Trace.WriteLine(sql);
}
...
}