确定主机程序集是否在类库程序集的调试中

时间:2015-11-04 13:49:54

标签: c# .net-assembly

我有一个类库,如果主机程序集在调试中,我想登录到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);
    }

    ...
}

0 个答案:

没有答案