2010-01-05 52 views
2

當我直接從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不同的目錄中。

回答

4

您應該使用[Assembly]::LoadFrom而不是LoadFile。 LoadFile用於加載不能在常規程序集加載上下文中加載的程序集,例如,您嘗試加載相同程序集的兩個版本的情況。它不使用正常的探測規則,因此它不會自動加載依賴關係。以下是LoadFile的文檔摘錄。

Use the LoadFile method to load and examine assemblies that have the same identity, but are located in different paths. LoadFile does not load files into the LoadFrom context, and does not resolve dependencies using the load path, as the LoadFrom method does. LoadFile is useful in this limited scenario because LoadFrom cannot be used to load assemblies that have the same identities but different paths; it will load only the first such assembly.

如果你正在使用PowerShell 2.0中,你可能希望使用而不是添加 - 鍵入:

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

如果一切都失敗了,run Fuslogvw.exe找出爲什麼綁定失敗。

0

使用set-psdebug -trace 2查看它正準備調用的內容。

0

這可能是因爲PowerGUI是一個不同的PowerShell主機,所以它的「本地文件夾」是Program Files中的PowerGUI文件夾,而不是$ pshome - 放置DLL的位置。