我尝试使用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
抱歉,因为我运行的系统是中文的,还有其他任何想法,错误信息中的中文?
答案 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问题。