2013-08-02 46 views
15

Tôi có bên thứ ba DLL (viết bằng C#)Làm thế nào để gọi phương thức tĩnh trong PowerShell

đó có một lớp được gọi là DBConnection và phương pháp tĩnh gọi Connect Khi tôi gọi là phương pháp từ C# console ứng dụng của tôi như dưới đây nó sẽ làm việc tốt.

DataPackage.Db.DBConnection.Connect() 

Tiếp theo tôi đã cố gắng làm điều tương tự bằng PowerShell.

[DataPackage.Db.DBConnection]::Connect() 

Nhưng điều đó mang lại cho tôi lỗi

Exception calling "Connect" with "0" argument(s): "Object reference not set to an instance of an object." 

lý do cho điều này và làm thế nào để sửa lỗi này là gì ??

+1

Nó có thể hữu ích cho chúng tôi biết những gì các thư viện của bên thứ ba là và chỉ cho chúng ta đến bất kỳ tài liệu trên lớp/phương pháp. – jpmc26

+0

lỗi trên trỏ đến thực tế là connect() cần phải được gọi từ một thể hiện của lớp, do đó, một đơn giản x = new-object [DataPackage.Db.DBConnection] hoặc tương tự theo sau là x.connect() sẽ giải quyết vấn đề này . :) – GMasucci

Trả lời

1

Đó không phải là vấn đề với PowerShell vì lệnh gọi phương thức của bạn thực sự chính xác. Dường như phương pháp tự nó cố gắng dereference null ở đâu đó. Có lẽ các phương pháp khác phải được gọi là đầu tiên, hoặc có thể là một thuộc tính tĩnh được đặt ở đâu đó.

+0

Có cách nào để sửa lỗi này hay xác định nguyên nhân thực sự là gì? – Sonali

+0

Tìm mã, tôi đoán, tức là tháo nó ra. Tôi vẫn đang cố nghĩ về một lý do tại sao điều này sẽ không được kích hoạt trong C#, rõ ràng – Joey

13

Tôi ghét bỏ câu trả lời mà không có tham chiếu ngoài kinh nghiệm cá nhân, nhưng tôi chưa bao giờ tìm thấy lời giải thích cho hành vi này, vì vậy xin lỗi điều này không có nhiều thông tin.

Khi gọi một phương pháp không tham số sẽ tắt các dấu ngoặc đơn. Vì vậy, ví dụ bạn làm:

[DataPackage.Db.DBConnection]::Connect 

thay vì ... Connect()

Các vấn đề liên quan