指定是否应向从远程源加载的程序集授予在 .NET Framework 4 及更高版本中的完全信任。
注释
如果由于 Visual Studio 项目错误列表中出现错误消息或生成错误而定向到本文,请参阅 How to: Use an Assembly from the Web in Visual Studio.
<配置>
<运行时>
<loadFromRemoteSources>
Syntax
<loadFromRemoteSources
enabled="true|false"/>
属性和元素
下列各节描述了特性、子元素和父元素。
特性
| Attribute | Description |
|---|---|
enabled |
必需属性。 指定是否应向从远程源加载的程序集授予完全信任。 |
enabled 属性
| 价值 | Description |
|---|---|
false |
不要向来自远程源的应用程序授予完全信任。 这是默认情况。 |
true |
向来自远程源的应用程序授予完全信任。 |
子元素
没有。
父元素
| 元素 | Description |
|---|---|
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.
若要加载程序集并执行其代码,必须:
显式为程序集创建沙盒(请参阅 How to: Run Partially Trusted Code in a Sandbox)。
完全信任运行程序集的代码。 可以通过配置
<loadFromRemoteSources>元素来执行此作。 它允许你指定在早期版本的 .NET Framework 中以部分信任方式运行的程序集现在在 .NET Framework 4 及更高版本中完全信任运行。
重要
如果程序集不应完全信任运行,请不要设置此配置元素。 而是创建用于加载程序集的沙盒 AppDomain 。
enabled仅当禁用代码访问安全性(CAS)时,该元素的属性<loadFromRemoteSources>才有效。 默认情况下,CAS 策略在 .NET Framework 4 及更高版本中处于禁用状态。 如果设置为 enabledtrue,则向远程程序集授予完全信任。
如果未 enabled 设置为 true,则会在以下任一条件下引发 a FileLoadException :
当前域的沙盒行为与其在 .NET Framework 3.5 中的行为不同。 这要求禁用 CAS 策略,并且当前域不进行沙盒化。
正在加载的
MyComputer程序集不在区域中。
<loadFromRemoteSources>设置元素以防止true引发此异常。 它使你能够指定你不依赖公共语言运行时来沙盒加载的程序集以实现安全性,并允许它们完全信任地执行。
注释
在 .NET Framework 4.5 及更高版本中,本地网络共享(即 本地 Intranet 安全区域)上的程序集默认以完全信任方式运行;无需启用
<loadFromRemoteSources>元素。 对于本地计算机或本地 Intranet 以外的安全区域,请将值设置为true。如果应用程序已从 Web 复制,则 Windows 会将其标记为 Web 应用程序,即使它驻留在本地计算机上也是如此。 可以通过更改其文件属性来更改该指定,也可以使用
<loadFromRemoteSources>该元素授予程序集完全信任。 或者,可以使用 UnsafeLoadFrom 该方法加载作系统已标记为已从 Web 加载的本地程序集。你可能会在 Windows 虚拟电脑应用程序中运行的应用程序中获取一个 FileLoadException 。 尝试从托管计算机上的链接文件夹加载文件时,可能会发生这种情况。 当你尝试从通过 远程桌面服务 (终端服务)链接的文件夹加载文件时,也会发生这种情况。 若要避免异常,请设置为
enabledtrue.
配置文件
此元素通常用于应用程序配置文件,但可用于其他配置文件,具体取决于上下文。 有关详细信息,请参阅 .NET Security 博客中的 “CAS 策略的更隐式使用:loadFromRemoteSources ”一文。
Example
以下示例演示如何向从远程源加载的程序集授予完全信任。
<configuration>
<runtime>
<loadFromRemoteSources enabled="true"/>
</runtime>
</configuration>