如何使用空证据创建AppDomain?

时间:2015-11-18 07:00:38

标签: c# .net appdomain

通过COM实例化.NET类时,创建的AppDomain evidenceis null

我正在尝试分析仅在AppDomain证据为空时才会出现的问题,并且我想在.NET中创建一个mcve,即无需在COM中注册该类并从那里打电话给它。为此,我需要一个空洞的AppDomain。

我该怎么做?将null传递给AppDomain.CreateDomain时,会重复使用当前AppDomain的证据。

1 个答案:

答案 0 :(得分:1)

实际上,无法在.Net 4.0 +中创建具有空证据的AppDomain。您的代码是否在早期版本上运行?

AppDomain.Evidence属性返回内部AppDomain.EvidenceNoDemand属性,两个getter的反编译源代码都在下面,

从源代码看来,任何app域都不能有空证据,无论它是通过COM还是通过托管程序集创建的。

public Evidence Evidence
{
    [SecuritySafeCritical, TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries"), SecurityPermission(SecurityAction.Demand, ControlEvidence=true)]
    get
    {
        return this.EvidenceNoDemand;
    }
}

internal Evidence EvidenceNoDemand
{
    [SecurityCritical]
    get
    {
        if (this._SecurityIdentity != null)
        {
            return this._SecurityIdentity.Clone();
        }
        if (!this.IsDefaultAppDomain() && this.nIsDefaultAppDomainForEvidence())
        {
            return GetDefaultDomain().Evidence;
        }
        return new Evidence(new AppDomainEvidenceFactory(this));
    }
}