2010-01-05 1 views
2

Powershell 콘솔에서 스크립트를 직접 실행하면 작동합니다. PowerGUI에서 스크립트를 실행하고 객체를 인스턴스화하려고하면 오류가 발생합니다.PowerGUI 내에서 실행할 powershell 스크립트를 가져올 수 없습니다.

"3"인수가있는 ".ctor"예외 : "파일 또는 어셈블리를로드 할 수 없습니다."MyLib, 버전 = 1.0 .0.0, Culture = neutral, PublicKeyToken = 77f676cc8f85d94e '또는 해당 종속성 중 하나입니다. 시스템에서 지정한 파일을 찾을 수 없습니다. "

필요한 모든 DLL을 $ PSHOME에 넣으면 스크립트가 PowerGUI가 아닌 콘솔에서 성공적으로 실행됩니다. DLL을 로컬 디렉토리로 이동하고 리플렉션으로 DLL을로드하면 스크립트가 PowerGUI 또는 powershell 콘솔에서 실행되지 않습니다.

[reflection.assembly]::loadfile('c:\mylibs\mylib.dll')

PowerGUI에서 스크립트를 실행하려면 무엇을해야합니까? 이상적으로는 $ PSHOME이 아닌 다른 디렉토리에있는 DLL을 원합니다.

답변

4

LoadFile 대신 [Assembly]::LoadFrom을 사용해야합니다. 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을 넣습니다.