AppDomainManager 类

定义

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

public ref class AppDomainManager : MarshalByRefObject
[System.Runtime.InteropServices.ComVisible(true)]
public class AppDomainManager : MarshalByRefObject
[System.Runtime.InteropServices.ComVisible(true)]
[System.Security.SecurityCritical]
public class AppDomainManager : MarshalByRefObject
[<System.Runtime.InteropServices.ComVisible(true)>]
type AppDomainManager = class
    inherit MarshalByRefObject
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Security.SecurityCritical>]
type AppDomainManager = class
    inherit MarshalByRefObject
Public Class AppDomainManager
Inherits MarshalByRefObject
继承
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.Policy;
using System.Security.Principal;
using System.Threading;
using System.Runtime.InteropServices;

[assembly: System.Security.AllowPartiallyTrustedCallersAttribute()]

namespace MyNamespace
{
    [GuidAttribute("F4D15099-3407-4A7E-A607-DEA440CF3891")]
    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;
            }
        }
    }
}
' 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
Imports System.Collections
Imports System.Net
Imports System.Reflection
Imports System.Security
Imports System.Security.Permissions
Imports System.Security.Policy
Imports System.Security.Principal
Imports System.Threading
Imports System.Runtime.InteropServices

<assembly: System.Security.AllowPartiallyTrustedCallersAttribute()>
<SecurityPermissionAttribute(SecurityAction.LinkDemand, _
    Flags:=SecurityPermissionFlag.Infrastructure)> _
<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, _
    Flags:=SecurityPermissionFlag.Infrastructure)> _
<GuidAttribute("F4D15099-3407-4A7E-A607-DEA440CF3891")> _
Public Class MyAppDomainManager
    Inherits AppDomainManager
    Private mySecurityManager As HostSecurityManager = Nothing
    
    Public Sub New() 
        Console.WriteLine(" My AppDomain Manager ")
        mySecurityManager = AppDomain.CurrentDomain.CreateInstanceAndUnwrap( _
            "CustomSecurityManager, Version=1.0.0.3, Culture=neutral, " & _
            "PublicKeyToken=5659fc598c2a503e", "MyNamespace.MySecurityManager")
        Console.WriteLine(" Custom Security Manager Created.")    
    End Sub
    
    Public Overrides Sub InitializeNewDomain(ByVal appDomainInfo _
        As AppDomainSetup) 
        Console.Write("Initialize new domain called:  ")
        Console.WriteLine(AppDomain.CurrentDomain.FriendlyName)
        InitializationFlags = _
            AppDomainManagerInitializationOptions.RegisterWithHost   
    End Sub

    Public Overrides ReadOnly Property HostSecurityManager() _
        As HostSecurityManager 
        Get
            Return mySecurityManager
        End Get
    End Property
End Class

注解

重要

请勿使用 AppDomainManager 在 ASP.NET 中配置应用程序域。 在 ASP.NET 中,配置必须由主机处理。

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

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 参与进程中的新应用程序域的创建,并且可以在其他托管代码运行之前自定义新的 AppDomainAppDomainManager还可以提供参与公共语言运行时执行的其他方面的主机管理器。 例如, AppDomainManager 可以标识 HostSecurityManager 参与应用程序域的安全决策的对象。

注意

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

注意

此类包含类级别的链接需求和继承需求。 SecurityException当直接调用方或派生类没有基础结构权限时,将引发 。 有关安全要求的详细信息,请参阅 链接需求继承要求

构造函数

AppDomainManager()

初始化 AppDomainManager 类的新实例。

属性

ApplicationActivator

获取应用程序激活器,该激活器用于激活相应域中的外接程序和基于清单的应用程序。

EntryAssembly

获取应用程序的入口程序集。

HostExecutionContextManager

获取宿主执行上下文管理器,该管理器对执行上下文的流进行管理。

HostSecurityManager

获取宿主安全管理器,该管理器参与应用程序域的安全决策。

InitializationFlags

获取自定义应用程序域管理器的初始化标志。

方法

CheckSecuritySettings(SecurityState)

指示是否允许在应用程序域中执行指定的操作。

CreateDomain(String, Evidence, AppDomainSetup)

返回新的或现有的应用程序域。

CreateDomainHelper(String, Evidence, AppDomainSetup)

提供帮助器方法以创建一个应用程序域。

CreateObjRef(Type)

创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。

(继承自 MarshalByRefObject)
Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetLifetimeService()
已过时.

检索控制此实例的生存期策略的当前生存期服务对象。

(继承自 MarshalByRefObject)
GetType()

获取当前实例的 Type

(继承自 Object)
InitializeLifetimeService()
已过时.

获取生存期服务对象来控制此实例的生存期策略。

(继承自 MarshalByRefObject)
InitializeNewDomain(AppDomainSetup)

初始化新应用程序域。

MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
MemberwiseClone(Boolean)

创建当前 MarshalByRefObject 对象的浅表副本。

(继承自 MarshalByRefObject)
ToString()

返回表示当前对象的字符串。

(继承自 Object)

适用于