我正在使用PowerShell的MSMQ触发器和规则进行一些工作,而且我遇到了问题。
我知道以编程方式访问触发器/规则的唯一方法是利用 mqtrig.dll 程序集,我的研究表明我必须运行 tlbimp.exe 创建一个可以从PowerShell加载的.NET程序集。好的没问题!
除非我运行 tlbimp 并尝试加载它生成的程序集,否则会出现此错误:
Add-Type:无法加载文件或程序集 '文件:/// C:\用户\ daniel.mann \桌面\ 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文件并允许它加载更新的程序集,但这绝对不会飞到这里 - 这是自动部署方案的一部分,我更喜欢不必将配置文件作为预部署步骤。
答案 0 :(得分: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。