<loadFromRemoteSources> 元素

指定是否应在 .NET Framework 4 及更高版本中对从远程源加载的程序集授予完全信任。

注意

如果你因为 Visual Studio 项目错误列表中的错误消息或生成错误而定向到本文,请参阅如何:在 Visual Studio 中使用 Web 程序集

configuration
  runtime
    <loadFromRemoteSources>

语法

<loadFromRemoteSources
   enabled="true|false"/>

特性和元素

下列各节描述了特性、子元素和父元素。

特性

属性 描述
enabled 必需的特性。

指定是否应向从远程源加载的程序集授予完全信任。

enabled 特性

说明
false 不向远程源的应用程序授予完全信任。 这是默认值。
true 向远程源的应用程序授予完全信任。

子元素

无。

父元素

元素 说明
configuration 公共语言运行时和 .NET Framework 应用程序所使用的每个配置文件中的根元素。
runtime 包含有关运行时初始化选项的信息。

注解

在 .NET Framework 3.5 和更早版本中,如果从远程位置加载程序集,则程序集中的代码以部分信任的方式运行,授权集取决于加载它的区域。 例如,如果从网站加载程序集,则会将其加载到 Internet 区域中并授予 Internet 权限集。 换句话说,它是在 Internet 沙盒中执行的。

从 .NET Framework 4 开始,将禁用代码访问安全性 (CAS) 策略,并以完全信任方式加载程序集。 通常情况下,这会向使用先前已进行沙盒处理的 Assembly.LoadFrom 方法加载的程序集授予完全信任。 为了防止出现这种情况,默认情况下,将禁用在从远程源加载的程序集中运行代码的功能。 默认情况下,如果尝试加载远程程序集,则会引发 FileLoadException 以及如下异常消息:

System.IO.FileNotFoundException: Could not load file or assembly 'file:assem.dll' or one of its dependencies. Operation is not supported.
(Exception from HRESULT: 0x80131515)
File name: 'file:assem.dll' --->
System.NotSupportedException: An attempt was made to load an assembly from a network location which would have caused the assembly
to be sandboxed in previous versions of the .NET Framework. This release of the .NET Framework does not enable CAS policy by default,
so this load may be dangerous. If this load is not intended to sandbox the assembly, please enable the loadFromRemoteSources switch.

若要加载程序集并执行其代码,你必须:

  • 为程序集显式创建沙盒(请参阅 如何:在沙盒中运行部分信任的代码)。

  • 在完全信任环境中运行程序集的代码。 可以通过配置 <loadFromRemoteSources> 元素来执行此操作。 它使你能够指定在 .NET Framework 早期版本中以部分信任方式运行的程序集现在在 .NET Framework 4 及更高版本中以完全信任方式运行。

重要

如果程序集不应以完全信任方式运行,请不要设置此配置元素。 而是改为创建一个可在其中加载程序集的沙盒 AppDomain

<loadFromRemoteSources> 元素的 enabled 属性仅在禁用代码访问安全性 (CAS) 时有效。 默认情况下,CAS 策略在 .NET Framework 4 及更高版本中处于禁用状态。 如果将 enabled 设置为 true,则会向远程程序集授予完全信任。

如果 enabled 未设置为 true,则在以下任一条件下将引发 FileLoadException

  • 当前域的沙盒行为与 .NET Framework 3.5 中的行为不同。 这要求禁用 CAS 策略,当前域不会进行沙盒处理。

  • 正在加载的程序集不是来自 MyComputer 区域。

<loadFromRemoteSources> 元素设置为 true 可防止引发此异常。 通过此设置,你可以指定不依赖公共语言运行时来对加载的程序集进行沙盒处理,以确保安全,并确保它们可以在完全信任的环境中执行。

备注

  • 在 .NET Framework 4.5 及更高版本中,本地网络共享(即本地 Intranet 安全区域)上的程序集默认情况下以完全信任方式运行;你无需启用 <loadFromRemoteSources> 元素。 对于本地计算机或本地 Intranet 以外的安全区域,请将值设置为 true

  • 如果应用程序是从 Web 复制而来,Windows 会将其标记为 Web 应用程序,即使它驻留在本地计算机上也不例外。 可以通过更改该指定的文件属性来对其进行更改,或者可以使用 <loadFromRemoteSources> 元素授予程序集完全信任。 对于操作系统标记为从 Web 加载的本地程序集,也可以使用 UnsafeLoadFrom 方法进行加载。

  • 你可能会在 Windows 虚拟电脑应用程序中运行的应用程序中遇到 FileLoadException。 在尝试从托管计算机上的链接文件夹中加载文件时,会发生这种情况。 当尝试从远程桌面服务(终端服务)上链接的文件夹加载文件时,也可能会发生这种情况。 若要避免此异常,请将 enabled 设置为 true

配置文件

此元素通常用在应用程序配置文件中,但可根据上下文用于其他配置文件。 有关详细信息,请参阅 .NET 安全博客中的以更隐式的形式使用 CAS 策略:loadFromRemoteSources 一文。

示例

下面的示例演示如何向从远程源加载的程序集授予完全信任。

<configuration>
   <runtime>
      <loadFromRemoteSources enabled="true"/>
   </runtime>
</configuration>

另请参阅