无法让PowerShell脚本在PowerGUI中运行

时间:2010-01-05 20:57:31

标签: powershell powergui

当我直接从Powershell控制台运行我的脚本时,它可以工作。当我在PowerGUI中运行我的脚本并尝试实例化一个对象时,我收到一个错误:

使用“3”参数调用“.ctor”的异常:“无法加载文件或程序集'MyLib,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 77f676cc8f85d94e'或其依赖项之一。系统找不到指定的文件。“

如果我将所有需要的DLL放在$ PSHOME中,脚本将成功从控制台运行,而不是PowerGUI。如果我将DLL移动到本地目录并使用反射加载DLL,则脚本将不会在PowerGUI和powershell控制台中运行。

  

[reflection.assembly] ::的loadFile( 'C:\ mylibs \中是指mylib.dll')

要让脚本在PowerGUI中运行,我需要做什么?理想情况下,我希望DLL与$ PSHOME不同。

3 个答案:

答案 0 :(得分:4)

您应该使用[Assembly]::LoadFrom而不是LoadFile。 LoadFile用于加载无法在正常程序集加载上下文中加载的程序集,例如您尝试加载同一程序集的两个版本的情况。它不使用正常的探测规则,因此它不会自动加载依赖项。以下是LoadFile文档的摘录。

  

使用LoadFile方法加载和   检查具有相同的程序集   身份,但位于不同的   路径。 LoadFile不加载文件   进入LoadFrom上下文,并做到了   不使用。解决依赖关系   加载路径,作为LoadFrom方法   确实。 LoadFile在这方面很有用   有限的情况因为LoadFrom   不能用于加载那些组件   具有相同的身份但不同   路径;它只会加载第一个   这样的集会。

如果您使用的是PowerShell 2.0,则可能希望使用Add-Type:

Add-Type -Path c:\mylibs\mylib.dll

如果所有其他方法都失败了,run Fuslogvw.exe找出绑定失败的原因。

答案 1 :(得分:0)

使用set-psdebug -trace 2查看它试图准确调用的内容。

答案 2 :(得分:0)

这可能是因为PowerGUI是一个不同的PowerShell主机,因此它的“本地文件夹”是Program Files中的PowerGUI文件夹,而不是$ pshome - 你放置DLL的地方。