C# Assembly.Load byte 在调用其他dll时[A] 无法强制转换为 [B]
时间: 2024-09-19 14:02:26 浏览: 51
在C#中,`Assembly.Load(byte[])` 是用于从字节数组动态加载一个.NET模块(如DLL)的一种方式。当你使用这种方式加载DLL时,你获取的是一个 `Assembly` 对象,它表示程序集但不是具体的类型。因此,如果你试图将 `Assembly` 对象直接强制转换为另一个特定类型的引用 `[A]` 或者将其内容转换为 `Type` 对象 `[B]`,你通常需要进一步操作。
例如:
```csharp
byte[] dllBytes = GetDllBytes(); // 获取 DLL 的字节数据
Assembly assembly = Assembly.Load(dllBytes);
Type someType; // 将 Assembly 转换为 Type
// 对于尝试强制转换为具体类型 A:
if (assembly.TryGetReferencedType("Namespace.TypeA", out someType))
{
// 使用 someType 引用
}
else
{
throw new FileNotFoundException();
}
// 或者将 Assembly 转换为 Type:
someType = assembly.GetType("Namespace.TypeB"); // 如果存在这个类型
```
这里的关键在于你需要通过 `assembly` 的方法找到对应的 `Type`,然后才能创建该类型的实例或进行类型相关的操作。所以,`Assembly.Load(byte[])` 直接的强制转换是不行的,它不会自动转化为指定的引用类型 `[A]` 或 `Type` 对象 `[B)`。
阅读全文