Как правильно добавить блоки.NET к сессии Powershell?

Вы могли установить транспорт, чтобы поставить почту Lamson. Существует предыдущее сообщение, которое могло помочь Вам.

24
задан 5 December 2012 в 06:24
6 ответов

Я использовал следующую настройку для загрузки пользовательского элемента управления csharp в PowerShell. Это позволяет настраивать и использовать элемент управления из PowerShell.

вот ссылка на блог

http://justcode.ca/wp/?p=435

и вот ссылка на код проекта с исходным кодом

http://www.codeproject.com/Articles/311705/Custom-CSharp-Control-for-Powershell

0
ответ дан 28 November 2019 в 20:18

Не могли бы вы окружить Add-Type попыткой отлова и распечатать свойство LoaderExceptions, как того требует ошибка. Он может предоставить исключение с более подробным сообщением об ошибке.

try
{
    Add-Type -Path "C:\rnd\CloudBerry.Backup.API.dll"
}
catch
{
    $_.Exception.LoaderExceptions | %
    {
        Write-Error $_.Message
    }
}
15
ответ дан 28 November 2019 в 20:18

Исключения LoaderExceptions скрыты внутри записи об ошибке. Если ошибка типа добавления была последней в списке ошибок, используйте $ Error [0] .InnerException.LoaderExceptions , чтобы отобразить ошибки. Скорее всего, ваша библиотека зависит от другой, которая не была загружена. Вы можете либо Add-Type для каждого, либо просто составить список и использовать аргумент -ReferencedAssemblies для Add-Type .

0
ответ дан 28 November 2019 в 20:18

Я полагаю, теперь вы МОЖЕТ найти ответ на этот феномен. Я наткнулся на этот пост после того, как столкнулся с той же проблемой ... Я мог загрузить сборку и просмотреть типы, содержащиеся в сборке, но не смог создать ее экземпляр из статического класса. Было ли это EFTIDY. Приборка, EFTidyNet.TidyNet.Options что ли? Ooooo Weeee ... Проблемы ... проблемы ... это может быть что угодно. И просмотр статических методов и типов DLL ничего многообещающего не выявил. Теперь я впадал в депрессию. У меня он работал в скомпилированной программе C #, но для моего использования я хотел, чтобы он работал на языке с интерполяцией ... powershell.

Мое решение, которое я нашел, и оно все еще проверяется, но я в восторге и хотел поделиться этим.Создайте небольшое приложение console.exe, выполняющее интересующую меня функцию, а затем просмотрите его в том, что могло бы декомпилировать его или показать код IL. Я использовал рефлектор Red-Gate и надстройку генератора языка PowerShell и Wallah! он показал, что такое правильная строка конструктора! :-) Попытайся. и я надеюсь, что это сработает для тех, кто сталкивается с этой проблемой.

-1
ответ дан 28 November 2019 в 20:18

Я нашел эту связь: http://www.madwithpowershell.com/2013/10/add-type-vs-reflectionassembly-in.html

Он говорит, что ".LoadWithPartialName" было устарело. Поэтому вместо того, чтобы продолжать реализацию Add-Type этим методом, он использует статическую внутреннюю таблицу для перевода "частичного имени" в "полное имя". В приведенном в вопросе примере CloudBerry.Backup.API.dll не имеет записи во внутренней таблице PowerShell, поэтому [System.Reflection.Assembly]::LoadFrom($dllpath) работает. Она не использует таблицу для поиска частичного имени.

[System.Reflection.Assembly]::LoadFrom($dllpath).
3
ответ дан 28 November 2019 в 20:18

Некоторые из вышеперечисленных методов либо не работали для меня, либо были непонятны.

Вот что я использую для обертывания вызовов -AddPath и перехвата исключений LoaderExceptions:

try
{
   Add-Type -Path "C:\path\to.dll"
}
catch [System.Reflection.ReflectionTypeLoadException]
{
   Write-Host "Message: $($_.Exception.Message)"
   Write-Host "StackTrace: $($_.Exception.StackTrace)"
   Write-Host "LoaderExceptions: $($_.Exception.LoaderExceptions)"
}

Ссылка
https: //social.technet.microsoft.com/Forums/sharepoint/en-US/dff8487f-69af-4b64-ab83-13d58a55c523/addtype-inheritance-loaderexceptions[1228 impression

2
ответ дан 28 November 2019 в 20:18

Теги

Похожие вопросы