2013-08-26 5 views
5

В моем сценарии командной оболочки я загружаю пользовательскую сборку, а затем создаю экземпляр класса этой сборки на New-Object.Не удалось загрузить файл или сборку

Assembly.LoadFile() Выполняется успешно, но инструкция New-Object дает исключение ниже.

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." 

Сценарий:

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

Это пользовательские ссылки сборки только следующие узлы

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

Я попытался явно загрузке DLL System.Runtime.Serialization, как показано ниже. Но такое же исключение

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

Любая идея?

+0

В: Ваша сборка зарегистрирована в gac? – Mitul

+0

Нет, он не зарегистрирован в GAC. – nhrobin

+0

Попробуйте LoadFrom, чтобы узнать, работает ли он http://msdn.microsoft.com/en-us/library/1009fa28.aspx. – Mitul

ответ

6

Не использовать LoadFile. Так как вы используете Powershell V2, предпочтительный метод 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/ имеет хороший список различных способов, доступных для импорта библиотеки в текущей оболочке пространство выполнения.

http://technet.microsoft.com/en-us/library/hh849914.aspx является documentaion на TechNet Add-Type и имеет примеры в том числе, как использовать статические методы в загруженной библиотеке

+0

Работал || Спасибо .. – nhrobin

+0

Я просто брошу это здесь, а также: http://www.madwithpowershell.com/2013/10/add-type-vs-reflectionassembly-in.html Add-Type очень разборчив о сборках –

0

Я встал вопрос, когда я попытался вызвать 32-битную Oracle.DataAccess.dll из 64- бит Windows PowerShell ISE. Позже я использовал тот же код в Windows PowerShell ISE (x86), и я смог вызвать файл Oracle.DataAccess.dll. Ура!

Смежные вопросы