0

PowerShell から MSMQ トリガーとルールを使用していくつかの作業を行っていますが、問題が発生しています。

トリガー/ルールにプログラムでアクセスする唯一の方法は、mqtrig.dllアセンブリを利用することであり、調査によると、tlbimp.exeを実行して、PowerShell からロードできる .NET アセンブリを作成する必要があることがわかっています。オッケー、問題ないよ!

tlbimpを実行して生成されたアセンブリを読み込もうとすると、次のエラーが発生します。

Add-Type : ファイルまたはアセンブリ 'file:///C:\users\daniel.mann\desktop\mqtrig.dll' またはその依存関係の 1 つを読み込めませんでした。このアセンブリは、現在読み込まれているランタイムよりも新しいランタイムによってビルドされているため、読み込むことができません。

見ると、次のようになり$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 がいくつか入っていたので、次の 1 つを見つけました。

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

Microsoft (R) .NET Framework Type Library to Assembly Converter 2.0.50727.42

同じエラーが発生することを除いて。

2.0、3.5 、および 4.0 のバージョンを提供するtlbimpの少なくとも 3 つの異なるバージョンを試しました。PowerShell 1.0/2.0の正しいバージョンは何ですか? また、開発マシンのどこに配置されますか?

PowerShell.exe.config ファイルを作成して新しいアセンブリを読み込めるようにすることはできますが、ここでは絶対に飛ばしません。これは自動展開シナリオの一部であり、行かなくて済むようにしたいと思います。展開前のステップとして構成ファイルをいじります。

4

1 に答える 1

2

私はこの問題に直面して細心の注意を払いました。

初め:

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 を使用していなかったことだったようです。

于 2014-06-05T15:56:06.597 に答える