2013-08-26 33 views
5

W moim skrypcie powłoki mocy ładuję niestandardowy zespół, a następnie tworzenie instancji klasy tego zespołu przez New-Object.Nie można załadować pliku lub zespołu

Assembly.LoadFile() działa pomyślnie, ale oświadczenie New-Object podaje wyjątek poniżej.

New-Object : Exception calling ".ctor" with "1" argument(s): "Could not load file or assembly 'MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of i 
ts dependencies. The system cannot find the file specified." 

Script:

[System.Reflection.Assembly]::LoadFile("MyAssembly.dll") 
$a=New-Object MyAssembly.MyClass -ArgumentList "arg1" 

Ten zwyczaj referencje montażowych tylko następujące zespoły

System 
System.Core 
System.Runtime.Serialization 
System.Xml.Linq 
System.Data 
System.Xml 

Próbowałem wyraźnie ładowania dll System.Runtime.Serialization jak poniżej. Ale ten sam wyjątek:

[System.Reflection.Assembly]::Load("System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") 

Masz pomysł?

+0

P: Czy twoje zgromadzenie jest zarejestrowane w GAC? – Mitul

+0

Nie, nie jest zarejestrowany w GAC. – nhrobin

+0

Wypróbuj LoadFrom, aby sprawdzić, czy działa http://msdn.microsoft.com/en-us/library/1009fa28.aspx. – Mitul

Odpowiedz

6

Nie używaj LoadFile. Ponieważ używasz PowerShell V2, preferowaną metodą jest Add-Type

Add-Type -AssemblyName "MyLibrary.dll" 

http://www.dougfinke.com/blog/index.php/2010/08/29/how-to-load-net-assemblies-in-a-powershell-session/ ma dobrą listę różnych sposobów dostępnych importować bibliotekę do bieżącej powłoki runspace.

http://technet.microsoft.com/en-us/library/hh849914.aspx jest funkcja dokumentowania technet na Add-Type i ma przykłady tym, jak korzystać z metody statyczne w załadowanej biblioteki

+0

Zadziałało || Dzięki .. – nhrobin

+0

Po prostu wyrzucę to tutaj: http://www.madwithpowershell.com/2013/10/add-type-vs-reflectionassembly-in.html Add-Type jest bardzo wrażliwy na złożenia –

0

I wobec tego problemu, gdy starałem się powołać 32-bitową Oracle.DataAccess.dll od 64- nieco Windows Powershell ISE. Później użyłem tego samego kodu w systemie Windows Powershell ISE (x86) i mogłem wywołać plik Oracle.DataAccess.dll. Twoje zdrowie!

Powiązane problemy