У меня есть сборка .NET (dll), которая представляет собой API для резервного копирования программного обеспечения, которое мы здесь используем. Он содержит некоторые свойства и методы, которые я хотел бы использовать в своих скриптах Powershell. Однако я сталкиваюсь с множеством проблем, связанных с первой загрузкой сборки, а затем использованием любого из типов после загрузки сборки.
Полный путь к файлу:
C:\rnd\CloudBerry.Backup.API.dll
В Powershell я использую:
$dllpath = "C:\rnd\CloudBerry.Backup.API.dll"
Add-Type -Path $dllpath
Я получаю ошибку ниже:
Add-Type : Unable to load one or more of the requested types. Retrieve the
LoaderExceptions property for more information.
At line:1 char:9
+ Add-Type <<<< -Path $dllpath
+ CategoryInfo : NotSpecified: (:) [Add-Type], ReflectionTypeLoadException
+ FullyQualifiedErrorId : System.Reflection.ReflectionTypeLoadException,Microsoft.PowerShell.Commands.AddTypeComma
ndAdd-Type : Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
Использование того же командлета в другой сборке .NET, DotNetZip , в которой есть примеры использования той же функциональности на сайте, также не работает.
В конце концов я обнаружил, что могу загрузить сборку с помощью отражения:
[System.Reflection.Assembly]::LoadFrom($dllpath)
Хотя я не понимаю разницы между методами Load, LoadFrom или LoadFile, последний метод, кажется, работает.
Тем не менее, я все еще не могу создавать экземпляры или использовать объекты. Каждый раз, когда я пытаюсь, я получаю ошибки, которые описывают, что Powershell не может найти ни одного из открытых типов.
Я знаю, что классы там:
$asm = [System.Reflection.Assembly]::LoadFrom($dllpath)
$cbbtypes = $asm.GetExportedTypes()
$cbbtypes | Get-Member -Static
---- начало выдержки ----
TypeName: CloudBerryLab.Backup.API.BackupProvider
Name MemberType Definition
---- ---------- ----------
PlanChanged Event System.EventHandler`1[CloudBerryLab.Backup.API.Utils.ChangedEventArgs] PlanChanged(Sy...
PlanRemoved Event System.EventHandler`1[CloudBerryLab.Backup.API.Utils.PlanRemoveEventArgs] PlanRemoved...
CalculateFolderSize Method static long CalculateFolderSize()
Equals Method static bool Equals(System.Object objA, System.Object objB)
GetAccounts Method static CloudBerryLab.Backup.API.Account[], CloudBerry.Backup.API, Version=1.0.0.1, Cu...
GetBackupPlans Method static CloudBerryLab.Backup.API.BackupPlan[], CloudBerry.Backup.API, Version=1.0.0.1,...
ReferenceEquals Method static bool ReferenceEquals(System.Object objA, System.Object objB)
SetProfilePath Method static System.Void SetProfilePath(string profilePath)
---- конец выдержки ----
Попытка использовать статические методы не удалась, я не знаю почему !!!
[CloudBerryLab.Backup.API.BackupProvider]::GetAccounts()
Unable to find type [CloudBerryLab.Backup.API.BackupProvider]: make sure that the assembly containing this type is load
ed.
At line:1 char:42
+ [CloudBerryLab.Backup.API.BackupProvider] <<<< ::GetAccounts()
+ CategoryInfo : InvalidOperation: (CloudBerryLab.Backup.API.BackupProvider:String) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
Любое руководство приветствуется!