我有一个来自供应商的 SDK,我正在使用其中的特定 DLL,该 DLL 提供与供应商系统的 COM 互操作。
我已使用此 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 x86 中运行,我什至尝试使用描述的方法强制 CLRVersion 匹配 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
最佳答案
这里的主要线索是 BadImageFormatException。这意味着您要么尝试将 32 位 dll 加载到 64 位 PowerShell 进程中,要么尝试将 64 位 dll 加载到 32 位 PowerShell 进程中。
供应商是否提供您正在加载的互操作 DLL,或者您是否使用 tlbimp 等工具生成它?通常这些 DLL 是架构中立的(任何 CPU),除非它们需要 pinvoke 到 dll 或在进程中加载 COM dll。
关于c# - 无法在 Powershell 中加载 .NET 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31545746/