如何从PowerShell 1.0中调用DLL方法

4
我正在使用PowerShell 1.0版本的脚本调用DLL文件中的方法,并使用以下代码将DLL文件加载到PowerShell中。
[System.Reflection.Assembly]::LoadFile("path of dll") is loaded successfully

GAC    Version        Location
---    -------        --------
False  v2.0.50727     location of dll

该类包含一个公共默认构造函数。我尝试使用下面的代码创建该类的对象:
$obj = new-object namespce.classname

并且它抛出以下错误:

New-Object : 使用 "0" 个参数调用 ".ctor" 时发生异常: "'namespce.classname' 的类型初始化程序引发了异常。"
在 line:1 char:18
+ $obj = new-object <<<< namespce.classname
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodInvocationException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand`

当我尝试调用类的方法而没有创建对象时,尽管该类包含该方法,但它会抛出以下错误:

PS C:\Windows\system32> [namespace.classname]::method()
Method invocation failed because [namespace.classname] doesn't contain a method named 'method'.
At line:1 char:39
+ [namespace.classname]::method <<<< ()
    + CategoryInfo          : InvalidOperation: (method:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

这通常是DLL版本问题导致的版本错误。Dot NET不允许卸载,PowerShell也是如此。因此,重新启动会重新开始并解决问题。只需确保版本没有歧义即可避免同样的问题。


2
为了成功,method()需要是静态的。你能发布相关方法的签名吗?例如:public static string foo(int bar){} - MatthewMartin
嗨,MathewMartin, 这是一个返回类型为void的公共方法(public method())。 公共 void method() - user1970320
1个回答

3

很可能这个方法是一个实例方法,这意味着你需要有该类的一个实例。你可以通过该类的公共默认构造函数来获取实例,例如:

$obj = new-object namespace.classname
$obj.Method()

可能唯一公共构造函数需要参数,例如:

$obj = new-object namespace.classname -arg 'string_arg',7
$obj.Method()

或者可能没有公共构造函数,但是有一个静态的Create或Parse方法返回一个实例,如下:

$obj = [namespace.classname]::Create()
$obj.Method()

嗨,Keith Hill,实际上,我尝试了上述创建对象的方法,并且如果有一个公共默认构造函数,所以我尝试使用以下代码创建对象 $obj = new-object namespace.classname,但它抛出了以下错误。`New-Object:使用“0”个参数调用“.ctor”时引发异常:“classname.method”的类型初始化程序引发了 n例外。” 在第1行第18个字符处:
  • $obj = new-object <<<< classname.method`
- user1970320
类型初始化器是静态构造函数。如果出现问题,则可能是因为您加载的程序集需要来自另一个未加载的程序集的类型。使用 ILDasm(随 .NET SDK 一起提供)或获取免费工具,如 dotPeek,打开程序集并查看它引用的其他程序集。您需要将尚未加载到 PowerShell 进程中的程序集加载进来。 - Keith Hill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接