/// <summary>Returns an application domain that can be either a new or existing domain.</summary>
/// <returns>An <see cref="T:System.AppDomain" /> object.</returns>
/// <param name="friendlyName">The friendly name of the domain. </param>
/// <param name="securityInfo">An <see cref="T:System.Security.Policy.Evidence" /> object that contains evidence mapped through the security policy to establish a top-of-stack permission set.</param>
/// <param name="appDomainInfo">An <see cref="T:System.AppDomainSetup" /> object that contains application domain initialization information.</param>
/// <filterpriority>2</filterpriority>
/// <PermissionSet>
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="ControlEvidence, ControlAppDomain, Infrastructure" />
/// </PermissionSet>
public virtual AppDomain CreateDomain(string friendlyName, Evidence securityInfo, AppDomainSetup appDomainInfo)
{
this.InitializeNewDomain(appDomainInfo);
AppDomain appDomain = AppDomainManager.CreateDomainHelper(friendlyName, securityInfo, appDomainInfo);
if ((this.HostSecurityManager.Flags & HostSecurityManagerOptions.HostPolicyLevel) == HostSecurityManagerOptions.HostPolicyLevel)
{
PolicyLevel domainPolicy = this.HostSecurityManager.DomainPolicy;
if (domainPolicy != null)
{
appDomain.SetAppDomainPolicy(domainPolicy);
}
}
return(appDomain);
}