Saya memiliki .NET assembly (dll) yang merupakan API untuk membuat cadangan perangkat lunak yang kami gunakan di sini. Ini berisi beberapa properti dan metode yang ingin saya manfaatkan dalam skrip Powershell saya. Namun, saya mengalami banyak masalah dengan pertama-tama memuat rakitan, kemudian menggunakan salah satu jenis setelah rakitan dimuat.
Jalur file lengkap adalah:
C:\rnd\CloudBerry.Backup.API.dll
Di Powershell saya menggunakan:
$dllpath = "C:\rnd\CloudBerry.Backup.API.dll"
Add-Type -Path $dllpath
Saya mendapatkan kesalahan di bawah ini:
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.
Menggunakan cmdlet yang sama pada rakitan .NET lainnya, DotNetZip , yang memiliki contoh penggunaan fungsi yang sama di situs juga tidak berfungsi untuk saya.
Saya akhirnya menemukan bahwa saya tampaknya dapat memuat perakitan menggunakan refleksi:
[System.Reflection.Assembly]::LoadFrom($dllpath)
Meskipun saya tidak mengerti perbedaan antara metode Load, LoadFrom, atau LoadFile, metode terakhir ini sepertinya berfungsi.
Namun, sepertinya saya masih tidak dapat membuat instance atau menggunakan objek. Setiap kali saya mencoba, saya mendapatkan kesalahan yang menggambarkan bahwa Powershell tidak dapat menemukan tipe publik apa pun.
Saya tahu kelas ada di sana:
$asm = [System.Reflection.Assembly]::LoadFrom($dllpath)
$cbbtypes = $asm.GetExportedTypes()
$cbbtypes | Get-Member -Static
---- mulai dari kutipan ----
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)
---- Akhir kutipan ----
Mencoba menggunakan metode statis gagal, saya tidak tahu kenapa !!!
[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
Bimbingan apa pun dihargai !!