Tôi có một hội đồng .NET (một dll) là một API để sao lưu phần mềm chúng tôi sử dụng ở đây. Nó chứa một số thuộc tính và phương thức tôi muốn tận dụng trong tập lệnh Powershell của mình. Tuy nhiên, tôi đang gặp nhiều vấn đề với lần đầu tiên tải lắp ráp, sau đó sử dụng bất kỳ loại nào sau khi lắp ráp được tải.
Đường dẫn tệp hoàn chỉnh là:
C:\rnd\CloudBerry.Backup.API.dll
Trong Powershell tôi sử dụng:
$dllpath = "C:\rnd\CloudBerry.Backup.API.dll"
Add-Type -Path $dllpath
Tôi nhận được lỗi dưới đây:
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.
Sử dụng cùng một lệnh ghép ngắn trên một cụm .NET khác, DotNetZip , có các ví dụ về việc sử dụng cùng chức năng trên trang web cũng không hoạt động đối với tôi.
Cuối cùng tôi thấy rằng tôi dường như có thể tải lắp ráp bằng cách sử dụng sự phản chiếu:
[System.Reflection.Assembly]::LoadFrom($dllpath)
Mặc dù tôi không hiểu sự khác biệt giữa các phương thức Load, LoadFrom hoặc LoadFile mà phương thức cuối cùng có vẻ hoạt động.
Tuy nhiên, tôi dường như vẫn không thể tạo cá thể hoặc sử dụng các đối tượng. Mỗi lần tôi thử, tôi nhận được các lỗi mô tả rằng Powershell không thể tìm thấy bất kỳ loại nào.
Tôi biết các lớp học ở đó:
$asm = [System.Reflection.Assembly]::LoadFrom($dllpath)
$cbbtypes = $asm.GetExportedTypes()
$cbbtypes | Get-Member -Static
---- bắt đầu đoạn trích ----
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)
---- kết thúc đoạn trích ----
Cố gắng sử dụng các phương thức tĩnh thất bại, tôi không biết tại sao !!!
[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
Bất kỳ hướng dẫn đánh giá cao !!