我有一個來自供應商的SDK,其中我使用了一個特定的DLL,它提供了與供應商系統進行COM互操作的DLL。無法在Powershell中加載.NET程序集
我已成功創建一個使用此DLL中的類的POC C#項目。我添加對DLL的引用,爲名稱空間添加using子句,瞧。我的目標框架是4.0,平臺是x86。
我現在想使用Powershell來實現相同的任務,但是我無法獲取DLL加載。
當我嘗試
add-type -path $myDLL
或
[System.Reflection.Assembly]::LoadFrom($myDLL)
我得到以下異常:
add-type : Could not load file or assembly 'file:///C:\Program Files
(x86)\Interwoven\WorkSite\IManage.dll' or one of its dependencies. The module was expected to contain
an assembly manifest.
At line:2 char:1
+ add-type -path $myDLL
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Add-Type], BadImageFormatException
+ FullyQualifiedErrorId : System.BadImageFormatException,Microsoft.PowerShell.Commands.AddTypeComma
nd
我已確認我在PowerShell中運行,我甚至嘗試強制CLRVersion使用m來匹配DLL ImageRuntimeVersion方法描述here沒有成功。
我還有什麼在這裏失蹤?謝謝!
PS H:\> $env:processor_architecture
x86
PS H:\> $psversiontable
Name Value
---- -----
PSVersion 3.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.34209
BuildVersion 6.2.9200.16398
PSCompatibleVersions {1.0, 2.0, 3.0}
PSRemotingProtocolVersion 2.2
您需要運行32位的PowerShell控制檯。 C:\ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ powershell.exe 無法在64位進程中加載32位dll,反之亦然,除非dll是針對任何Cpu編譯的,在這種情況下.Net JIT's它到適當的平臺。 com interop dll不是這種情況。 –
我正在運行32位PowerShell會話 – Yevgeniy
請注意,'$ env:Processor_Architecture'告訴您處理器體系結構不是進程位。當然,由於它是x86,因此不可能錯誤地運行64位進程。使用'[Environment] :: Is64BitProcess'來判斷當前進程是否爲64位。 –