Assembly.Load()加载的参数
时间: 2024-09-10 12:19:32 浏览: 61
`Assembly.Load()` 方法在 C# 中用于从内存中的已编译类型加载程序集。它通常用于加载已经由 `AppDomain` 加载过的程序集。这个方法接受一个 `Type` 或者 `String` 参数来指定要加载的程序集的类型名称或文件路径。
相比之下,`Assembly.LoadFrom()` 方法更直接地加载一个 DLL 文件到应用程序域,而无需先知道其内部的类型信息。它的参数是一个字符串,表示要加载的DLL文件的完整路径。
`Assembly.LoadFile()` 方法也是用来加载 DLL 文件的,但它是从磁盘上读取文件而不是从内存中。与 `LoadFrom()` 类似,它也需要传入文件路径作为参数。
引用[1]总结如下:
> `Assembly.Load()` 用于从内存中加载已知类型的程序集;`Assembly.LoadFrom()` 和 `Assembly.LoadFile()` 用于从磁盘加载程序集,前者基于文件名,后者基于文件路径。
示例代码([^1])展示了如何使用 `Assembly.LoadFrom()` 方法:
```csharp
// 加载 D:\Test\MyAssembly.dll 文件
Assembly assembly = Assembly.LoadFrom(@"D:\Test\MyAssembly.dll");
```
相关问题
Assembly.Load(h)参数详解
`Assembly.Load()` 方法在 C# 中用于加载程序集,其主要参数 `h` 是可以有多种形式的:
1. **文件路径**[^1]:
```csharp
Assembly ass = Assembly.ReflectionOnlyLoadFrom(assemblyFile);
```
如果你想从磁盘上的某个文件直接加载程序集,可以传入该文件的完整路径作为参数。`ReflectionOnlyLoadFrom` 特殊于只读加载,这意味着它不会执行代码,仅用于反射访问。
2. **AssemblyName**[^2]:
```csharp
string assemblyName = "AssemblyTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fffb45e56dd478e3";
Assembly ass = Assembly.ReflectionOnlyLoad(assemblyName);
```
或者你可以提供一个完整的程序集名称(包括版本、文化信息和公钥token),C# 会尝试找到匹配的程序集。
3. **二进制流**:
```csharp
byte[] buffer = System.IO.File.ReadAllBytes(ass.Location);
Assembly assembly = Assembly.Load(buffer);
```
这种情况下,你需要先读取程序集的文件到内存中形成字节数组,然后传递给 `Assembly.Load()` 来加载。
需要注意的是,`Assembly.Load()` 可能会抛出异常,比如找不到指定的程序集,或者程序集已经加载过。因此,在实际操作时要确保路径、名称或二进制数据的准确性。
Assembly.LoadFile和Assemly.LoadFrom区别
`Assembly.LoadFile` 和 `Assembly.LoadFrom` 都是 .NET Framework 中用于加载程序集(assembly)的方法,它们的主要区别在于处理文件的位置和方式:
1. **Assembly.LoadFile**:
- 这个方法直接接收一个路径作为参数,通常是表示一个可执行文件(.exe)、dll 文件或者是包含资源的其他形式的文件。
- 它会按照文件的二进制内容来查找并加载整个程序集,不需要提供应用程序域(AppDomain)。
- 如果应用程序域已经存在并且加载了相同的文件,那么它不会重新加载该程序集,除非设置了相关的设置来强制更新。
2. **Assembly.LoadFrom**:
- 同样接受一个文件路径,但它更灵活一些,因为它可以在当前 AppDomain 或指定的 AppDomain 中加载文件。
- 当需要在一个独立的应用域(AppDomain)内加载程序集时,`LoadFrom` 操作更为合适,因为它允许你控制新的 AppDomain 的配置。
- 跟踪的加载上下文更清晰,如果你在某个特定上下文中加载过一个程序集,之后在这个上下文中再尝试加载同一个文件会更快,因为它已经被缓存了。
总的来说,`Assembly.LoadFile` 更适用于加载本地文件并立即执行,而 `Assembly.LoadFrom` 则更适合于跨 AppDomain 加载或者需要控制加载过程的情况。
阅读全文