System.AppDomainManager 类

方法描述

提供非托管宿主的等效托管宿主。

语法定义(C# System.AppDomainManager 类 的用法)

[ComVisibleAttribute(true)]
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.Infrastructure)]
public class AppDomainManager : MarshalByRefObject

构造函数

构造函数名称 构造函数描述
AppDomainManager 初始化 AppDomainManager 类的新实例。

成员/方法

方法名称 方法描述
CheckSecuritySettings 指示是否允许在应用程序域中执行指定的操作。
CreateDomain 返回新的或现有的应用程序域。
CreateDomainHelper 提供帮助器方法以创建一个应用程序域。
CreateObjRef 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。)
Equals(Object) 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)
GetLifetimeService 检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。)
GetType 获取当前实例的 Type。 (继承自 Object。)
InitializeLifetimeService 获取控制此实例的生存期策略的生存期服务对象。 (继承自 MarshalByRefObject。)
InitializeNewDomain 初始化新应用程序域。
MemberwiseClone() 创建当前 Object 的浅表副本。 (继承自 Object。)
MemberwiseClone(Boolean) 创建当前 MarshalByRefObject 对象的浅表副本。 (继承自 MarshalByRefObject。)
ToString 返回表示当前对象的字符串。 (继承自 Object。)

提示和注释

重要事项

请勿使用 AppDomainManager 在 ASP.NET 中配置应用程序域。 在 ASP.NET 中,必须由宿主进行配置。

实现 AppDomainManager 类使承载应用程序能够参与新应用程序域的创建。 若要替换默认的 AppDomainManager,在 APPDOMAIN_MANAGER_ASM and APPDOMAIN_MANAGER_TYPE 环境变量中标识替换的程序集和类型 AppDomainManager ,或使用 配置文件中的元素。 该程序集必须完全受信任,并且包含在起始应用程序的全局程序集缓存或目录中。 环境变量中的类型和程序集名称必须是完全限定的。 例如:

set APPDOMAIN_MANAGER_TYPE=MyNamespace.TestAppDomainManager

set APPDOMAIN_MANAGER_ASM=customappDomainmanager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f1368f7b12a08d72

重要事项

如果包含 AppDomainManager 子类的程序集依赖于通过条件 AllowPartiallyTrustedCallersAttribute (APTCA) 特性标记的程序集,则必须将这些程序集包括到传递给 PartialTrustVisibleAssemblies 属性的列表中,该属性是您用来创建应用程序域的 AppDomainSetup 的属性。 否则,使用条件 APTCA 特性标记的程序集将被禁用。

AppDomainManager 是非托管宿主的等效托管宿主。 AppDomainManager 对象参与进程中新应用程序域的创建,并且可在其他托管代码运行之前自定义新的 AppDomain。 AppDomainManager 也可提供宿主管理器,这些宿主管理器参与公共语言运行时执行的其他方面。 例如,AppDomainManager 可以标识 HostSecurityManager 对象,该对象参与应用程序域的安全决策。

注意

只有被授予 FullTrust 的程序集(如全局程序集缓存中的程序集或者在 AppDomain.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, StrongName[]) 方法中标识为 fullTrustAssemblies 的程序集)才可以在 AppDomainManager 构造函数和 InitializeNewDomain 方法中加载。

注意

此类包含类级别的链接要求和继承要求。 如果直接调用方或继承类没有基础结构权限,则会引发 SecurityException。 有关安全要求的详细信息,请参见链接需求和继承需求。

System.AppDomainManager 类例子

下面的示例演示一个非常简单的 AppDomainManager 的实现。

// To replace the default AppDomainManager, identify  the 
// replacement assembly and replacement type in the 
// APPDOMAIN_MANAGER_ASM and APPDOMAIN_MANAGER_TYPE  
// environment variables. For example:
// set APPDOMAIN_MANAGER_TYPE=library.TestAppDomainManager
// set APPDOMAIN_MANAGER_ASM=library, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f1368f7b12a08d72

using System;
using System.Collections;
using System.Net;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
using System.Security.Principal;
using System.Threading;
using System.Runtime.InteropServices;

[assembly: System.Security.AllowPartiallyTrustedCallersAttribute()]

namespace MyNamespace
{
    [GuidAttribute("F4D15099-3407-4A7E-A607-DEA440CF3891")]
    [SecurityPermissionAttribute(SecurityAction.LinkDemand, 
        Flags = SecurityPermissionFlag.Infrastructure)]
    [SecurityPermissionAttribute(SecurityAction.InheritanceDemand, 
        Flags = SecurityPermissionFlag.Infrastructure)]
    public class MyAppDomainManager : AppDomainManager
    {
        private HostSecurityManager mySecurityManager = null;

        public MyAppDomainManager()
        {
            Console.WriteLine(" My AppDomain Manager ");
            mySecurityManager = AppDomain.CurrentDomain.CreateInstanceAndUnwrap(
                "CustomSecurityManager, Version=1.0.0.3, Culture=neutral, " +
                "PublicKeyToken=5659fc598c2a503e", 
                "MyNamespace.MySecurityManager") as HostSecurityManager;
            Console.WriteLine(" Custom Security Manager Created.");
        }

        public override void InitializeNewDomain(AppDomainSetup appDomainInfo)
        {
            Console.Write("Initialize new domain called:  ");
            Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);
            InitializationFlags = 
                AppDomainManagerInitializationOptions.RegisterWithHost;
        }

        public override HostSecurityManager HostSecurityManager
        {
            get
            {
                return mySecurityManager;
            }
        }
    }
}

继承层次结构

System.Object

System.MarshalByRefObject

System.AppDomainManager

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

线程安全

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。

相关资源

System 命名空间
MSDN