我有一个 .NET 程序集,我从服务中检索该程序集并放入 byte[] 中。然后我使用反射加载这个程序集。尽管成功,PowerShell 仍会给出错误,指出无法找到该类型。为什么会发生这种情况?还看吗?
[byte[]]$bytes = #Code to get the assembly from the service
$asse = [reflection.assembly]::(“Load”)($bytes);
[Class1]::("Test")()
Unable to find type [Class1].
At line:5 char:1
+ [Class1]::("Test")()
+ ~~~~~~~~
+ CategoryInfo : InvalidOperation: (Class1:TypeName) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
.NET 类定义如下。
public class Class1
{
public static void Test()
{
System.Diagnostics.Process.Start("calc.exe");
}
}
我最初认为这是 Powershell 版本与用于编译程序集的 .NET 版本不一致的问题,但我已确认 Powershell 使用的是 CLR 版本 4.0.30319.42000。我已经使用 .NET 4.0 构建了 .NET 程序集。尽管如此,问题仍然存在。
此外,当我在 $asse 上运行 GetExportedTypes() 时,PowerShell 可以轻松找到类型。
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False Class1 System.Object
我不知道如何继续解决这个问题。任何帮助将不胜感激。
正如评论中所暗示的,您至少需要使用命名空间限定的类型名称,例如:
[Namespace.Used.By.Dave.Class1]
要查看包括命名空间的全名,请查看导出类型的
FullName
属性:
$asse.GetExportedTypes().Where({$_.Name -eq 'Class1'}) |% FullName