如何创建具有空证据的 AppDomain?

How do I create an AppDomain with a null evidence?

当您通过 COM 实例化 .NET class 时,evidence of the created AppDomain is null.

我正在尝试分析仅在 AppDomain 证据为空时才会出现的问题,我想创建一个纯粹在 .NET 中的 mcve,即无需注册 class 在 COM 中并从那里调用它。为此,我需要一个没有证据的 AppDomain。

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

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

AppDomain.Evidence属性returns内部AppDomain.EvidenceNoDemand属性和两个getter的反编译源代码如下,

从源代码看来,无论是通过 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));
    }
}