System.AppDomain.Load 方法 (AssemblyName)

方法描述

在给定 AssemblyName 的情况下加载 Assembly。

语法定义(C# System.AppDomain.Load 方法 (AssemblyName) 的用法)

public Assembly Load(
	AssemblyName assemblyRef
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
assemblyRef System-Reflection-AssemblyName 描述要加载的程序集的对象。
返回值 System.Reflection.Assembly 加载的程序集。

提示和注释

此方法只应用于将程序集加载到当前应用程序域中。 此方法为方便无法调用静态 Assembly.Load 方法的互操作调用方而提供。 要将程序集加载到其他应用程序域中年,请使用诸如 CreateInstanceAndUnwrap 的方法。

如果已加载所请求程序集的某个版本,则即使请求其他版本,此方法仍返回已加载的程序集。

不建议为 assemblyRef 提供部分程序集名称。 (部分名称省略一个或多个区域性、版本或公钥标记。 对于采用字符串而不是 AssemblyName 对象的重载,“MyAssembly, Version=1.0.0.0”是部分名称的一个示例,“MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=18ab3442da84b47”是全名的一个示例。)使用部分名称对性能有负面影响。 此外,仅当应用程序基目录(BaseDirectory 或 AppDomainSetup.ApplicationBase)中有某个程序集的精确副本时,部分程序集名称才可以从全局程序集缓存加载该程序集。

如果当前 AppDomain 对象表示应用程序域 A,并且从应用程序域 B 调用 Load 方法,则该程序集同时加载到这两个应用程序域中。 例如,下面的代码将 MyAssembly 加载到新的应用程序域 ChildDomain 中,同时也加载到执行代码的应用程序域中:

C#

C++

VB

复制

AppDomain ad = AppDomain.CreateDomain("ChildDomain");

ad.Load("MyAssembly");

程序集同时加载到这两个域中,因为 Assembly 不是从 MarshalByRefObject 派生的,因此无法封送 Load 方法的返回值。 而公共语言运行时则尝试将程序集加载到调用应用程序域中。 如果这两个应用程序域的路径设置不同,则加载到它们中的程序集可能会不同。

注意

如果同时设置了 AssemblyName.Name 属性和 AssemblyName.CodeBase 属性,加载程序集的第一次尝试将使用显示名称(包括版本、区域性等,由 Assembly.FullName 属性返回)。 如果找不到该文件,则使用 CodeBase 属性搜索程序集。 如果使用 CodeBase 找到了程序集,则将显示名称与程序集匹配。 如果匹配失败,则引发 FileLoadException。

System.AppDomain.Load 方法 (AssemblyName)例子


异常

异常 异常描述
ArgumentNullException assemblyRef 为 null。
FileNotFoundException 未找到 assemblyRef。
BadImageFormatException
  • assemblyRef 不是有效程序集。
  • 当前加载的是 2.0 或更高版本的公共语言运行时,而 assemblyRef 是用更高版本的公共语言运行时编译的。
AppDomainUnloadedException 尝试对已卸载的应用程序域进行操作。
FileLoadException 用两个不同的证据将一个程序集或模块加载了两次。

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。