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