Assembly.LoadFrom 方法

定义

加载程序集。

重载

LoadFrom(String, Evidence, Byte[], AssemblyHashAlgorithm)
已过时.

通过给定程序集文件名或路径、安全证据、哈希值及哈希算法来加载程序集。

LoadFrom(String, Byte[], AssemblyHashAlgorithm)

通过给定程序集文件名或路径、哈希值及哈希算法来加载程序集。

LoadFrom(String)

已知程序集的文件名或路径,加载程序集。

LoadFrom(String, Evidence)
已过时.

在给定程序集的文件名或路径并提供安全证据的情况下,加载程序集。

注解

仅限 .NET Framework: 有关从远程位置加载程序集的信息,请参阅 <loadFromRemoteSources>

LoadFrom(String, Evidence, Byte[], AssemblyHashAlgorithm)

注意

This method is obsolete and will be removed in a future release of the .NET Framework. Please use an overload of LoadFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.

通过给定程序集文件名或路径、安全证据、哈希值及哈希算法来加载程序集。

public static System.Reflection.Assembly LoadFrom (string assemblyFile, System.Security.Policy.Evidence securityEvidence, byte[] hashValue, System.Configuration.Assemblies.AssemblyHashAlgorithm hashAlgorithm);
[System.Obsolete("This method is obsolete and will be removed in a future release of the .NET Framework. Please use an overload of LoadFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public static System.Reflection.Assembly LoadFrom (string assemblyFile, System.Security.Policy.Evidence securityEvidence, byte[] hashValue, System.Configuration.Assemblies.AssemblyHashAlgorithm hashAlgorithm);

参数

assemblyFile
String

包含程序集清单的文件的名称或路径。

securityEvidence
Evidence

用于加载程序集的证据。

hashValue
Byte[]

计算所得的哈希代码的值。

hashAlgorithm
AssemblyHashAlgorithm

用于对文件进行哈希处理并生成强名称的哈希算法。

返回

加载的程序集。

属性

例外

assemblyFilenull

未找到 assemblyFile,或者你正在试图加载的模块未指定文件名扩展。

无法加载已找到的文件。

- 或 -

securityEvidence 是明确的,但被确定为无效。

- 或 -

assemblyFile 指定基于 <loadFromRemoteSources> 禁用的位置。

assemblyFile 不是当前加载的运行时的有效程序集;例如,64 位进程中的 32 位程序集。

指定了不以“file://”开头的基本代码,且没有所需的 WebPermission

assemblyFile 参数为空字符串 ("")。

程序集名称超过系统定义的最大长度。

注解

参数 assemblyFile 必须引用不带转义字符的 URI。 此方法为 URI 中的所有无效字符提供转义字符。

备注

不支持文件传输协议 (FTP) 。 如果提供的 assemblyFile URI 是 FTP 地址,则不会加载程序集。 不会引发异常。

assemblyFile 可以是绝对目录,也可以是相对于当前目录。

程序集可以加载到三个上下文之一,也可以在没有上下文的情况下加载:

  • 加载上下文包含通过探测找到的程序集:在 GAC 中、托管运行时时位于主机程序集存储区中,或者位于 ApplicationBase 应用程序域的 和 PrivateBinPath 中。 Load 方法的大多数重载都将程序集加载到此上下文中。

  • 从加载的上下文包含用户提供的路径不包括在探测搜索的目录中的程序集。 LoadFromCreateInstanceFromExecuteAssembly 都是通过路径加载的方法的示例。

    有关从远程位置加载程序集的信息,请参阅 <loadFromRemoteSources>

  • 仅反射上下文包含使用 ReflectionOnlyLoadReflectionOnlyLoadFrom 方法加载的程序集;无法执行这些上下文中的代码。

  • 如果用户生成或找到程序集,则它不在任何上下文中。 这适用于使用 方法的重载(指定包含程序集的 Load 字节数组)加载的程序集,以及使用反射发出且未保存到磁盘创建的暂时性动态程序集。

从上下文加载允许从未包含在探测中的路径加载程序集,但允许查找和加载该路径的依赖项,因为路径信息由上下文维护。

方法 LoadFrom 具有以下缺点。 请考虑改用 Load

  • 如果已加载一个具有相同标识的程序集,则即使指定了不同的路径,LoadFrom 仍返回已加载的程序集。

  • 如果使用 加载 LoadFrom程序集,然后加载上下文中的程序集尝试按显示名称加载相同的程序集,则加载尝试失败。 对程序集进行反序列化时,可能发生这种情况。

  • 如果使用 加载 LoadFrom程序集,并且探测路径包含具有相同标识但不同位置的程序集, InvalidCastException则会发生 、 MissingMethodException或其他意外行为。

  • LoadFrom 需要对指定路径的 FileIOPermissionAccess.ReadFileIOPermissionAccess.PathDiscoveryWebPermission

  • 如果 存在 的 assemblyFile本机映像,则不使用该映像。 程序集不能加载为非域性程序集。

是否将特定的权限授予程序集是基于证据的。 程序集和安全证据合并的规则如下:

  • 使用 LoadFrom 没有 Evidence 参数的方法时,程序集会加载加载程序提供的证据。

  • 将 方法与参数一LoadFromEvidence起使用时,将合并证据片段。 作为方法参数 LoadFrom 提供的证据片段取代加载程序提供的证据片段。

  • 如果在同一程序集上多次调用此方法,但指定了不同的证据,则公共语言运行时不会引发 , FileLoadException 因为无法确定不同证据规范的相等性和完整性。 第一个成功的证据是使用的证据。

  • 使用 LoadFrom 具有 Byte[] 参数的方法加载通用对象文件格式 (COFF) 图像时,将合并证据。 ZoneUrlSite 继承自调用程序集,和 HashStrongName 取自 COFF 程序集。

  • 使用 LoadFrom 具有 Byte[] 参数 的方法和 Evidence 加载 COFF 图像时,仅使用提供的证据。 将忽略调用程序集的证据和 COFF 映像的证据。

适用于

.NET Framework 4.8.1 和其他版本
产品 版本 (已过时)
.NET Framework 1.1, 2.0, 3.0, 3.5 (4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1)

LoadFrom(String, Byte[], AssemblyHashAlgorithm)

Source:
Assembly.cs
Source:
Assembly.cs
Source:
Assembly.cs

通过给定程序集文件名或路径、哈希值及哈希算法来加载程序集。

public static System.Reflection.Assembly LoadFrom (string assemblyFile, byte[]? hashValue, System.Configuration.Assemblies.AssemblyHashAlgorithm hashAlgorithm);
public static System.Reflection.Assembly LoadFrom (string assemblyFile, byte[] hashValue, System.Configuration.Assemblies.AssemblyHashAlgorithm hashAlgorithm);

参数

assemblyFile
String

包含程序集清单的文件的名称或路径。

hashValue
Byte[]

计算所得的哈希代码的值。

hashAlgorithm
AssemblyHashAlgorithm

用于对文件进行哈希处理并生成强名称的哈希算法。

返回

加载的程序集。

例外

仅限 .NET Core 和 .NET 5 及更高版本:在所有情况下。

assemblyFilenull

未找到 assemblyFile,或者你正在试图加载的模块未指定文件扩展名。

无法加载已找到的文件。

- 或 -

assemblyFile 指定基于 <loadFromRemoteSources> 禁用的位置。

assemblyFile 不是当前加载的运行时的有效程序集;例如,64 位进程中的 32 位程序集。

指定了不以“file://”开头的基本代码,且没有所需的 WebPermission

assemblyFile 参数为空字符串 ("")。

程序集名称超过系统定义的最大长度。

注解

在 .NET Core 和 .NET 5+ 中,此方法在 NotSupportedException 调用时引发。 请改用 LoadFrom(String)

参数 assemblyFile 必须引用不带转义字符的 URI。 此方法为 URI 中的所有无效字符提供转义字符。

备注

不支持文件传输协议 (FTP) 。 如果提供的 assemblyFile URI 是 FTP 地址,则不会加载程序集。 不会引发异常。

assemblyFile 可以是绝对目录,也可以是相对于当前目录。

程序集可以加载到三个上下文之一,也可以在没有上下文的情况下加载:

  • 加载上下文包含通过探测找到的程序集:在全局程序集缓存中、托管运行时时位于主机程序集存储中,或位于 ApplicationBase 应用程序域的 和 PrivateBinPath 中。 Load 方法的大多数重载都将程序集加载到此上下文中。

  • 从上下文加载的程序集包含用户为其提供了未包含在探测中的路径的程序集。 LoadFromCreateInstanceFromExecuteAssembly 都是通过路径加载的方法的示例。

    有关从远程位置加载程序集的信息,请参阅 <loadFromRemoteSources>

  • 仅反射上下文包含使用 ReflectionOnlyLoadReflectionOnlyLoadFrom 方法加载的程序集;无法执行这些上下文中的代码。

  • 如果用户生成或找到程序集,则它不在任何上下文中。 这适用于使用 方法的重载(指定包含程序集的 Load 字节数组)加载的程序集,以及使用反射发出且未保存到磁盘创建的暂时性动态程序集。

从加载上下文允许从未包含在探测中的路径加载程序集,但允许查找和加载该路径上的依赖项,因为路径信息由上下文维护。

方法 LoadFrom 具有以下缺点。 请考虑改用 Load

  • 如果已加载一个具有相同标识的程序集,则即使指定了不同的路径,LoadFrom 仍返回已加载的程序集。

  • 如果使用 加载 LoadFrom程序集,然后加载上下文中的程序集尝试按显示名称加载相同的程序集,则加载尝试失败。 对程序集进行反序列化时,可能发生这种情况。

  • 如果使用 加载 LoadFrom程序集,并且探测路径包含具有相同标识但不同位置的程序集, InvalidCastException则会发生 、 MissingMethodException或其他意外行为。

  • LoadFrom 需要对指定路径的 FileIOPermissionAccess.ReadFileIOPermissionAccess.PathDiscoveryWebPermission

  • 如果 存在 的 assemblyFile本机映像,则不使用该映像。 程序集不能以非特定于域的方式加载。

程序集加载有加载程序提供的证据。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

LoadFrom(String)

Source:
Assembly.cs
Source:
Assembly.cs
Source:
Assembly.cs

已知程序集的文件名或路径,加载程序集。

public static System.Reflection.Assembly LoadFrom (string assemblyFile);

参数

assemblyFile
String

包含程序集清单的文件的名称或路径。

返回

加载的程序集。

例外

assemblyFilenull

未找到 assemblyFile,或者你正在试图加载的模块未指定文件名扩展。

无法加载已找到的文件。

- 或 -

仅限 .NET Framework: assemblyFile 指定基于 <loadFromRemoteSources> 禁用的位置。

assemblyFile 不是当前加载的运行时的有效程序集;例如,64 位进程中的 32 位程序集。

指定了不以“file://”开头的基本代码,且没有所需的 WebPermission

assemblyFile 参数为空字符串 ("")。

程序集名称超过系统定义的最大长度。

示例

以下示例在给定程序集的文件名或路径的情况下加载程序集。

Assembly SampleAssembly;
SampleAssembly = Assembly.LoadFrom("c:\\Sample.Assembly.dll");
// Obtain a reference to a method known to exist in assembly.
MethodInfo Method = SampleAssembly.GetTypes()[0].GetMethod("Method1");
// Obtain a reference to the parameters collection of the MethodInfo instance.
ParameterInfo[] Params = Method.GetParameters();
// Display information about method parameters.
// Param = sParam1
//   Type = System.String
//   Position = 0
//   Optional=False
foreach (ParameterInfo Param in Params)
{
    Console.WriteLine("Param=" + Param.Name.ToString());
    Console.WriteLine("  Type=" + Param.ParameterType.ToString());
    Console.WriteLine("  Position=" + Param.Position.ToString());
    Console.WriteLine("  Optional=" + Param.IsOptional.ToString());
}

注解

参数 assemblyFile 必须引用不带转义字符的 URI。 此方法为 URI 中的所有无效字符提供转义字符。

备注

不支持文件传输协议 (FTP) 。 如果提供的 assemblyFile URI 是 FTP 地址,则不会加载程序集。 不会引发异常。

assemblyFile 可以是绝对目录或相对于当前目录。

仅限 .NET Framework: 程序集可以加载到三个上下文之一,也可以在没有上下文的情况下加载:

  • 加载上下文包含通过探测找到的程序集:在 GAC 中、托管运行时时位于主机程序集存储区中,或者位于 ApplicationBase 应用程序域的 和 PrivateBinPath 中。 Load 方法的大多数重载都将程序集加载到此上下文中。

  • 从加载的上下文包含用户提供的路径不包括在探测搜索的目录中的程序集。 它还允许查找和加载该路径上的依赖项,因为路径信息由上下文维护。 LoadFromCreateInstanceFromExecuteAssembly 都是通过路径加载的方法的示例。

    有关从远程位置加载程序集的信息,请参阅 <loadFromRemoteSources>

  • 仅反射上下文包含使用 ReflectionOnlyLoadReflectionOnlyLoadFrom 方法加载的程序集;无法执行这些上下文中的代码。

  • 如果用户生成或找到程序集,则它不在任何上下文中。 这适用于使用 方法的重载(指定包含程序集的 Load 字节数组)加载的程序集,以及使用反射发出且未保存到磁盘创建的暂时性动态程序集。

方法 LoadFrom 具有以下缺点。 请考虑改用 Load

  • 如果具有相同标识的程序集已加载到加载源上下文中,则即使指定了不同的路径,LoadFrom 也仍会返回已加载的程序集。

  • 即使加载上下文中存在具有相同标识的程序集,也可以从加载上下文中加载程序集。 两个程序集之间的互操作性将不起作用,从而导致错误(如 InvalidCastExceptionMissingMethodException)或其他意外行为。

  • 使用探测路径中的位置调用 LoadFrom 将在加载上下文中加载程序集,而不是从上下文加载程序集。

  • 如果将标识由绑定重定向策略所管理的程序集文件传递给 LoadFrom,则将应用该策略,并且将从加载上下文中的探测路径加载程序集。

  • 如果程序集在 load-from 上下文中加载,然后加载上下文中的程序集尝试按显示名称加载相同的程序集,则加载尝试失败。 对程序集进行反序列化时,可能发生这种情况。

  • LoadFrom 需要对指定路径的 FileIOPermissionAccess.ReadFileIOPermissionAccess.PathDiscoveryWebPermission

  • 如果 存在 的 assemblyFile本机映像,则不使用该映像。 程序集不能加载为非域性程序集。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

LoadFrom(String, Evidence)

注意

This method is obsolete and will be removed in a future release of the .NET Framework. Please use an overload of LoadFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.

在给定程序集的文件名或路径并提供安全证据的情况下,加载程序集。

public static System.Reflection.Assembly LoadFrom (string assemblyFile, System.Security.Policy.Evidence securityEvidence);
[System.Obsolete("This method is obsolete and will be removed in a future release of the .NET Framework. Please use an overload of LoadFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public static System.Reflection.Assembly LoadFrom (string assemblyFile, System.Security.Policy.Evidence securityEvidence);

参数

assemblyFile
String

包含程序集清单的文件的名称或路径。

securityEvidence
Evidence

用于加载程序集的证据。

返回

加载的程序集。

属性

例外

assemblyFilenull

未找到 assemblyFile,或者你正在试图加载的模块未指定文件名扩展。

无法加载已找到的文件。

- 或 -

securityEvidence 是明确的,但被确定为无效。

- 或 -

assemblyFile 指定基于 <loadFromRemoteSources> 禁用的位置。

assemblyFile 不是当前加载的运行时的有效程序集;例如,64 位进程中的 32 位程序集。

指定了不以“file://”开头的基本代码,且没有所需的 WebPermission

assemblyFile 参数为空字符串 ("")。

程序集名称超过系统定义的最大长度。

注解

参数 assemblyFile 必须引用不带转义字符的 URI。 此方法为 URI 中的所有无效字符提供转义字符。

备注

不支持文件传输协议 (FTP) 。 如果提供的 assemblyFile URI 是 FTP 地址,则不会加载程序集。 不会引发异常。

assemblyFile 可以是绝对目录,也可以是相对于当前目录。

程序集可以加载到三个上下文之一,也可以在没有上下文的情况下加载:

  • 加载上下文包含通过探测找到的程序集:在 GAC 中、托管运行时时位于主机程序集存储区中,或者位于 ApplicationBase 应用程序域的 和 PrivateBinPath 中。 Load 方法的大多数重载都将程序集加载到此上下文中。

  • 从加载的上下文包含用户提供的路径不包括在探测搜索的目录中的程序集。 LoadFromCreateInstanceFromExecuteAssembly 都是通过路径加载的方法的示例。

    有关从远程位置加载程序集的信息,请参阅 <loadFromRemoteSources>

  • 仅反射上下文包含使用 ReflectionOnlyLoadReflectionOnlyLoadFrom 方法加载的程序集;无法执行这些上下文中的代码。

  • 如果用户生成或找到程序集,则它不在任何上下文中。 这适用于使用 方法的重载(指定包含程序集的 Load 字节数组)加载的程序集,以及使用反射发出且未保存到磁盘创建的暂时性动态程序集。

从上下文加载允许从未包含在探测中的路径加载程序集,但允许查找和加载该路径的依赖项,因为路径信息由上下文维护。

方法 LoadFrom 具有以下缺点。 请考虑改用 Load

  • 如果已加载一个具有相同标识的程序集,则即使指定了不同的路径,LoadFrom 仍返回已加载的程序集。

  • 如果使用 加载 LoadFrom程序集,然后加载上下文中的程序集尝试按显示名称加载相同的程序集,则加载尝试失败。 对程序集进行反序列化时,可能发生这种情况。

  • 如果使用 加载 LoadFrom程序集,并且探测路径包含具有相同标识但不同位置的程序集, InvalidCastException则会发生 、 MissingMethodException或其他意外行为。

  • LoadFrom 需要对指定路径的 FileIOPermissionAccess.ReadFileIOPermissionAccess.PathDiscoveryWebPermission

  • 如果 存在 的 assemblyFile本机映像,则不使用该映像。 程序集不能加载为非域性程序集。

是否将特定的权限授予程序集是基于证据的。 程序集和安全证据合并的规则如下:

  • 使用 LoadFrom 没有 Evidence 参数的方法时,程序集会加载加载程序提供的证据。

  • 将 方法与参数一LoadFromEvidence起使用时,将合并证据片段。 作为方法参数 LoadFrom 提供的证据片段取代加载程序提供的证据片段。

  • 如果在同一程序集上多次调用此方法,但指定了不同的证据,则公共语言运行时不会引发 , FileLoadException 因为无法确定不同证据规范的相等性和完整性。 第一个成功的证据是使用的证据。

  • 使用 LoadFrom 具有 Byte[] 参数的方法加载通用对象文件格式 (COFF) 图像时,将合并证据。 ZoneUrlSite 继承自调用程序集,和 HashStrongName 取自 COFF 程序集。

  • 使用 LoadFrom 具有 Byte[] 参数 的方法和 Evidence 加载 COFF 图像时,仅使用提供的证据。 将忽略调用程序集的证据和 COFF 映像的证据。

另请参阅

适用于

.NET Framework 4.8.1 和其他版本
产品 版本 (已过时)
.NET Framework 1.1, 2.0, 3.0, 3.5 (4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1)