为什么 PowerShell 无法从加载的程序集中找到 .NET 库?

问题描述 投票:0回答:1

我有一个 .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 

我不知道如何继续解决这个问题。任何帮助将不胜感激。

powershell system.reflection
1个回答
0
投票

正如评论中所暗示的,您至少需要使用命名空间限定的类型名称,例如:

[Namespace.Used.By.Dave.Class1]

要查看包括命名空间的全名,请查看导出类型的

FullName
属性:

$asse.GetExportedTypes().Where({$_.Name -eq 'Class1'}) |% FullName
© www.soinside.com 2019 - 2024. All rights reserved.