【发布时间】:2013-08-09 17:38:06
【问题描述】:
我正在使用 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 = 新对象 + 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 也是如此。因此,重新启动将重新开始,并进行修复。只需确保版本没有歧义,即可避免同样的问题。
【问题讨论】:
-
为了成功,method() 需要是静态的。您可以发布相关方法的签名吗?例如公共静态字符串 foo(int bar){}
-
嗨,MathewMartin,它的返回类型为 void 的公共方法()。公共无效方法()
标签: .net windows powershell