应用程序域宿主

重要说明重要事项

在 .NET Framework 4 版中,公共语言运行时 (CLR) 不再为计算机提供安全策略。Microsoft 建议使用 Windows 软件限制策略替代 CLR 安全策略。此主题中的信息适用于 .NET Framework 3.5 和更低版本,不适用于 4 和更高版本。有关此更改和其他更改的更多信息,请参见 .NET Framework 4 中的安全性更改

每个 .NET Framework 应用程序均在创建应用程序域并向其中加载程序集的宿主所控制下的应用程序域中运行。 该宿主拥有对有关代码的信息(证据)的访问权(如代码出自的区域,或应用程序域中程序集的数字签名)。 受信任的宿主是拥有向公共语言运行时提供此类信息的权限的宿主。 System.AppDomain 类提供宿主使用的应用程序域功能。

下表显示应用程序宿主的类型。

应用程序域宿主

说明

浏览器宿主(例如 Microsoft Internet Explorer)

在网站的上下文中运行代码。

自定义设计的宿主

创建域并将程序集(包括动态程序集)加载到域中。 可以使用托管代码或非托管代码编写。

服务器宿主(例如 ASP.NET)

运行处理提交到服务器的请求的代码。

shell 宿主

从 shell 启动应用程序(.exe 文件)。

创建新应用程序域之后,宿主可以指定要应用到应用程序域中的代码的策略。 此策略始终受企业级策略、计算机策略和用户策略的制约。 宿主可以缩小计算机策略和用户策略允许的权限集,但是不能扩展该权限集。 只可以为应用程序域设置一次策略。 若要设置应用程序域策略,必须授予宿主控制域策略的安全权限(通过 SecurityPermission 类提供)。

设置应用程序域策略之后,将按照新策略(企业级策略、计算机策略、用户策略和应用程序域策略)向所有随后加载的程序集授予权限。 以前加载的程序集按照预先存在的策略(只有企业级策略、计算机策略和用户策略)获取权限授予。 不会按照新的应用程序域策略重新计算已授予这些程序集的权限。

受信任的宿主可以将有关加载到应用程序域的程序集的信息(证据)提供给运行时。 如果域宿主没有用以控制证据的相应 SecurityPermission,则运行时将使用对该宿主实施的安全性来确定要对程序集实施的安全性。

在某些情况下,通常由受信任的应用程序域宿主提供的证据实际上由加载程序提供。 通常,在创建应用程序域之后,应用程序域宿主将第一个(主)程序集加载到应用程序域中,并调入该程序集开始执行。 当第一个程序集内的代码引用另一个程序集内的代码时,加载程序解析该引用,将相应的程序集加载到应用程序域,并向运行时提供有关程序集的证据。 在这种情况下,原来为原始程序集提供证据的受信任的应用程序域宿主不会向后来加载的程序集提供证据。

请参见

参考

System.AppDomain

其他资源

安全策略管理