c# - 无法在 Powershell 中加载 .NET 程序集

标签 c# .net powershell dll

我有一个来自供应商的 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/

相关文章:

c# - 如何构建自己的自定义代码片段?

Powershell 添加空格

c# - 如何在 C# 中解码带有重音符号的 url

c# - 在 try block 中抛出异常有什么问题吗?

c# - 使用 XPath/应用 XSL 转换遍历任意 C# 对象图

c# - "stand alone"类文件如何工作?

powershell - 在 powershell 中生成文本序列

powershell - 如何使用 PowerShell 别名 cd 一个规范目录?

c# - 我在哪里可以找到在 C# 中为本地 HTTPs 服务器生成的证书

c# - Linq 自定义排序