使用PowerShell访问DLL类

时间:2015-04-15 10:39:22

标签: class powershell dll constructor

我尝试使用PowerShell来控制已发布API文档和dll的Bluethooth加密狗。

命名空间下有一个MasterEmulator类" Nordicsemi"可用,我用C#测试它,我可以使用下面的MasterEmulator构造函数创建一个实例,所有其他函数也可以正常工作。

MasterEmulator masterEmulator = new MasterEmulator();

但是我尝试使用以下脚本的PowerShell执行相同操作。

[System.Reflection.Assembly]::LoadFile($fullpath)
$MasterEmulatorInstance = New-Object Nordicsemi.MasterEmulator

我得到以下错误:

+ $MasterEmulatorInstance = New-Object Nordicsemi.MasterEmulator
+                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [New-Object],MethodInvocationException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

dll似乎正确加载,我只是无法让构造函数工作,我已检查过其他相关帖子但New-Object似乎是从一个类访问一个类的唯一方法。净dll。不知道我在这里做错了什么,任何提示都会受到赞赏,谢谢。

更新: 感谢您的回复,我尝试了更多加载程序集的方法,如下所示。

[System.Reflection.Assembly]::LoadFrom($fullpath) | Out-Null

并且没有Out-Null cmdlet

[System.Reflection.Assembly]::LoadFrom($fullpath)

输出显示

GAC    Version        Location                                                                                                                                                       
---    -------        --------                                                                                                                                                       
False  v4.0.30319     D:\Test\MasterEmulator.dll 

仍然给我同样的错误,我也试过以下方法。

[reflection.assembly]::loadwithpartialname("MasterEmulator.dll") | Out-Null
Add-Type -Path $fullpath

并且仍然没有运气,当我调用构造函数时,所有这些方法都给出了完全相同的错误。

New-Object : 以 "0" 引數呼叫 ".ctor" 時發生例外狀況: "無法載入檔案或組件     'IronPython, Version=2.7.0.40, Culture=neutral, PublicKeyToken=7f709c5b713576e1' 或其相依性的其中之一。 系統找不到指定的檔案。"
位於 D:\Test\test.ps1:3 字元:27
+ $MasterEmulatorInstance = New-Object Nordicsemi.MasterEmulator
+                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [New-Object],MethodInvocationException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

抱歉,因为我运行的系统是中文的,还有其他任何想法,错误信息中的中文?

1 个答案:

答案 0 :(得分:0)

尝试使用LoadFrom。以下是我加载MSTranslitTools.DLL的{​​{1}}的方法。

function load_transliterate(){
    $dll = Resolve-Path ".\tools\transliterate\MSTranslitTools.DLL"
    [System.Reflection.Assembly]::LoadFrom($dll) | out-null

    $specfile = Resolve-Path "Serbian Cyrillic to Latin.tms"      
    $tspec = [System.NaturalLanguage.Tools.TransliteratorSpecification]::FromSpecificationFile($specfile)

    $script:trans = [System.NaturalLanguage.Tools.Transliterator]::FromSpecification($tspec)

    Write-Verbose "Transliteration: $($trans.Input) -> $($trans.Output)"
}

了解差异transliteration。另见here SO问题。