默认情况下,公共语言运行库给每个使用 Internet Explorer 访问的站点创建一个应用程序域。应用程序域将在一个过程中运行的单独的应用程序隔离开来。应用程序域的创建方式影响程序集在该域中运行时具有的权限。每个应用程序域都与 URL 证据和应用程序基目录相关联,并且还可能拥有配置文件。
URL 证据
URL 证据分配给使用 Microsoft Internet Explorer 5.5 或更高版本所部署的应用程序。运行库主机使用此 URL 证据基于安全策略制定决策。虽然 URL 证据同时与组成应用程序的程序集和应用程序创建的应用程序域相关联,但在这两种情况下,证据的格式是不同的。对于程序集,URL 证据是主程序集文件的完整 URL 路径。例如,作为应用程序组成部分的程序集可具有 http://www.code.microsoft.com/myApp/myAssembly.dll 的 URL 证据。应用程序域的 URL 证据等同于站点证据。在前面的示例中,应用程序域的 URL 证据将为 http://www.code.microsoft.com/。
说明: |
|---|
应用程序配置文件的位置不会影响应用程序域的 URL 证据。 |
配置文件
使用 Internet Explorer 部署的 Web 应用程序可以使用存储在应用程序配置文件中的信息。应用程序配置文件必须与应用程序可执行文件位于 Web 服务器上的相同目录中。应用程序配置文件必须遵循应用程序配置文件的命名规则。该文件必须与可执行文件同名,并且文件名后追加扩展名 .config。例如,名为 myApplication.exe 的应用程序将拥有一个名为 myApplication.exe.config 的应用程序配置文件。
ASP.NET 应用程序使用 web.config 文件指定配置信息。Web 应用程序可以提供配置信息,这一点与 ASP.NET 和可执行文件宿主是相同的。如果在 Internet Explorer 中寄宿的应用程序具有配置文件,则使用 <link> 标记和以下语法指定配置文件的位置:
<LINK REL="CONFIGURATION" HREF="[configuration file name]"></LINK>
在此示例中,[configuration file name] 是配置文件的名称,例如:
<LINK REL="CONFIGURATION" HREF="two.dll.config"></LINK>
对于基本的 Web 应用程序方案(网页不提供指向配置文件的 <link> 标记)而言,运行库基于每个站点来创建应用程序域。即,如果 HTML 文档位于 http://www.code.microsoft.com/myApp/mypage.htm,则创建的应用程序域包含整个 http://www.code.microsoft.com 站点。请注意,尽管对 Web 作者而言这种方案是很方便的,但是由于未指定配置文件,所以使用该站点上托管代码程序集的所有网页共享同一个应用程序域。
如果应用程序从应用程序配置文件读取信息,您必须执行以下操作:
在更复杂的方案中,可能需要在同一站点上运行两个或多个不同的应用程序,并且要彼此隔离。若要实现这种隔离,网页作者必须在 HTML 文档中指定一个配置文件。所有指向同一配置文件的页在同一应用程序域中创建。这样,就可以基于每个配置文件创建应用程序域。
说明: |
|---|
当 <link> 标记中包含相对路径时,运行库不支持在指向配置文件的 URL 中使用字符“#”。 |
应用程序基目录
ApplicationBase 是一个应用程序域属性,该属性指定运行库搜索程序集时用作根目录的目录。默认情况下,将 ApplicationBase 属性假定为站点的根(例如,wwwroot)。如果存在应用程序配置文件,则 ApplicationBase 会成为该配置文件的位置。配置文件可包含特定于应用程序域中运行的代码的配置信息。如果您的计算机上定义了多个站点,则 ApplicationBase 默认为在端口 80 上定义的“默认”站点。
下载托管可执行文件
虽然使用 <object> 标记下载的大多数应用程序是在网页上出现的 UI 控件,但是运行库还支持两种用于下载托管可执行文件的方案:
在这两种方案中,运行库创建一个在其中运行此可执行文件的新应用程序域。对于后续的程序集请求,将应用程序基目录设置为此可执行文件的位置。
例如,以下代码引用 myClass:
<object id="myCtl"
classid="http://www.mycode.Microsoft.com/mycode.dll#myClass">
</object>
当使用 <object> 标记指定调用程序集时,静态链接的依赖程序集必须与调用程序集位于同一目录。例如,如果程序集 myAssembly.dll 是使用 <object> 标记指定的,并且具有对 myOtherAssembly.dll 的静态引用,则 myOtherAssembly.dll 必定可以在 myAssembly.dll 所在的同一目录下找到。
说明: |
|---|
由 Internet Explorer 使用 HREF 链接所部署的托管代码可执行文件不应该使用命令行参数启动。参数无法成功地传递到可执行文件。 |
错误报告
代码下载进程使用以下两个注册表设置来控制错误报告,该错误报告来自使用 Internet Explorer 部署的托管代码可执行文件。
两个设置都使用了以下值来指定如何报告错误。
值 | 说明 |
|---|
1 | 将错误信息发送到标准的输出流。 |
2 | 将错误信息显示到用户。 |
3 | 将错误信息发送到标准的输出流并显示到用户。 |
当您调试使用 Internet Explorer 部署的托管代码时,若要查找关于代码下载失败的详细信息,可使用这些设置的值。例如,这些设置允许您在引发异常时查看堆栈跟踪信息,而不依赖于由 Internet Explorer 提供的错误报告,这些错误报告是为最终用户而不是开发人员设计的。