【问题标题】:How do I generate a PowerShell-compatible version of a COM assembly using TLBImp.exe?如何使用 TLBImp.exe 生成 COM 程序集的 PowerShell 兼容版本?
【发布时间】:2014-07-26 15:44:21
【问题描述】:

我正在使用 PowerShell 中的 MSMQ 触发器和规则进行一些工作,但遇到了问题。

我知道以编程方式访问触发器/规则的唯一方法是利用 mqtrig.dll 程序集,我的研究表明我必须运行 tlbimp.exe 创建可以从 PowerShell 加载的 .NET 程序集。好的没问题!

除非我运行 tlbimp 并尝试加载它生成的程序集,否则我会收到以下错误:

Add-Type : 无法加载文件或程序集 'file:///C:\users\daniel.mann\desktop\mqtrig.dll' 或其之一 依赖关系。此程序集由比 当前已加载运行时,无法加载。

看着$psversiontable 告诉我这个:

Name                           Value                                                                                                                                                                                                                 
----                           -----                                                                                                                                                                                                                 
CLRVersion                     2.0.50727.5477                                                                                                                                                                                                        
BuildVersion                   6.1.7601.17514                                                                                                                                                                                                        
PSVersion                      2.0                                                                                                                                                                                                                   
WSManStackVersion              2.0                                                                                                                                                                                                                   
PSCompatibleVersions           {1.0, 2.0}                                                                                                                                                                                                            
SerializationVersion           1.1.0.1                                                                                                                                                                                                               
PSRemotingProtocolVersion      2.1    

所以,好吧。我知道了。我需要使用生成 CLR 2.0 程序集的 tlbimp 版本。简单吧?

好吧,我碰巧在这个盒子上有一些旧版本的 Visual Studio,所以我找到了一个:

C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin>tlbimp

Microsoft (R) .NET Framework 类型库到程序集转换器 2.0.50727.42

除了我得到同样的错误。

我已经尝试了至少 3 个不同版本的 tlbimp,它们分别提供了 2.0、3.5 和 4.0 版本。 PowerShell 1.0/2.0 的正确版本是什么?它位于开发机器上的什么位置?

我知道您可以创建一个 PowerShell.exe.config 文件并允许它加载更新的程序集,但这绝对不会在这里实现——这是自动化部署方案的一部分,我不希望这样做作为部署前的步骤,必须弄乱配置文件。

【问题讨论】:

    标签: powershell com-interop tlbimp


    【解决方案1】:

    我对这个问题的处理非常细致。

    第一:

    gci -rec C:\ -filter "tlbimp.exe" 这让我得到了这个盒子上所有 tlbimp 的副本。

    然后,我运行了这个:

    &"C:\Program Files\Microsoft.NET\SDK\v2.0 64bit\Bin\TlbImp.exe" "C:\windows\system32\mqtrig.dll" /out:"C:\users\daniel.mann\desktop\mqtrig1.dll"
    &"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\TlbImp.exe" "C:\windows\system32\mqtrig.dll" /out:"C:\users\daniel.mann\desktop\mqtrig2.dll"
    &"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\TlbImp.exe" "C:\windows\system32\mqtrig.dll" /out:"C:\users\daniel.mann\desktop\mqtrig3.dll"
    &"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\x64\TlbImp.exe" "C:\windows\system32\mqtrig.dll" /out:"C:\users\daniel.mann\desktop\mqtrig4.dll"
    &"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64\TlbImp.exe" "C:\windows\system32\mqtrig.dll" /out:"C:\users\daniel.mann\desktop\mqtrig5.dll"
    &"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\TlbImp.exe" "C:\windows\system32\mqtrig.dll" /out:"C:\users\daniel.mann\desktop\mqtrig6.dll"
    &"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64\TlbImp.exe" "C:\windows\system32\mqtrig.dll" /out:"C:\users\daniel.mann\desktop\mqtrig7.dll"
    &"C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin\TlbImp.exe" "C:\windows\system32\mqtrig.dll" /out:"C:\users\daniel.mann\desktop\mqtrig8.dll"
    
    add-type -Path "C:\users\daniel.mann\desktop\mqtrig1.dll"
    add-type -Path "C:\users\daniel.mann\desktop\mqtrig2.dll"
    add-type -Path "C:\users\daniel.mann\desktop\mqtrig3.dll"
    add-type -Path "C:\users\daniel.mann\desktop\mqtrig4.dll"
    add-type -Path "C:\users\daniel.mann\desktop\mqtrig5.dll"
    add-type -Path "C:\users\daniel.mann\desktop\mqtrig6.dll"
    add-type -Path "C:\users\daniel.mann\desktop\mqtrig7.dll"
    add-type -Path "C:\users\daniel.mann\desktop\mqtrig8.dll"
    

    mqtrig1、2、5 和 8 均已成功加载。看来问题是我很傻,没有使用 64 位版本的 tlbimp。

    【讨论】:

      猜你喜欢
      • 2010-10-17
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多