我使用Power
Shell版本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 : Exception calling “.ctor” with “0” argument(s): “The type initializer for ‘namespce.classname’ threw an exception.”
At 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一样.因此,重启将重新开始,并修复.通过确保版本没有模糊性来避免同样的问题.
最佳答案 很可能该方法是一个实例方法,这意味着您需要拥有该类的实例.你可以通过类上的公共默认构造函数来获得它,例如:
$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()