2017-07-13 19 views
7

Tôi muốn sử dụng kiểu dữ liệu từ thư viện Nền tảng Universal Windows, làm cách nào tôi có thể tham chiếu không gian tên hoặc lắp ráp có chứa trong PowerShell?Làm thế nào tôi có thể tham khảo các lớp UWP trong PowerShell

Ví dụ: tôi muốn sử dụng số Windows.Data.Json.JsonObject class để phân tích cú pháp một số json.

có điều này được một lớp .NET thường xuyên, tôi đã có thể làm một cái gì đó giống như

Add-Type -AssemblyName Windows.Data.Json 
$jsonObject = [Windows.Data.Json.JsonObject]::Parse('{data:["powershell","rocks"]}') 

Nhưng chiến lược này không thành công tôi với:

Add-Type : Cannot add type. The assembly 'Windows.Data.Json' could not be found. 
At line:1 char:1 
+ Add-Type -AssemblyName Windows.Data.Json 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ObjectNotFound: (Windows.Data.Json:String) [Add-Type], Exception 
    + FullyQualifiedErrorId : ASSEMBLY_NOT_FOUND,Microsoft.PowerShell.Commands.AddTypeCommand 

Bây giờ, nó có thể là tôi chỉ đơn giản sai khi giả định rằng việc lắp ráp cho không gian tên Windows.Data.JsonWindows.Data.Json.dll, nhưng tham chiếu API không thực sự chứa bất kỳ tham chiếu nào chứa tệp, dẫn tôi tin rằng tệp dll thực sự không phải là những gì tôi nên tìm kiếm.

Tôi giả định UWP có kho lưu trữ GAC giống như mát mẻ mà từ đó tôi có thể tải thư viện được chia sẻ, tôi chỉ đơn giản là không biết làm thế nào.

Vì vậy, về cơ bản câu hỏi của tôi là, làm cách nào tôi có thể tải thư viện được chia sẻ UWP vào PowerShell và cách tôi nên tham chiếu các loại chữ UWP?

Chạy PowerShell 5.1 trên Windows 10 (xây dựng 1703)

Trả lời

6

Ngay sau khi đăng câu hỏi này, tôi vấp vào the GitHub repo for BurntToast, một mô-đun cho phép nâng cao UWP Toast Notifications từ PowerShell, và nó tham chiếu kiểu WinRT ToastNotificationManager như thế này :

[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] 

vì vậy, có vẻ như cú pháp tôi sau khi cho các lớp UWP là:

[<class name>,<namespace>,ContentType = WindowsRuntime] 

Với điều này trong tâm trí, tôi đã cố gắng nó với các ví dụ tôi đã trong câu hỏi và lo and behold:

PS C:\> $jsonObjectClass = [Windows.Data.Json.JsonObject,Windows.Data.Json,ContentType=WindowsRuntime] 
PS C:\> $jsonObject = $jsonObjectClass::Parse('{"data":["powershell","rocks"]}') 
PS C:\> $jsonObject 

Key Value     
--- -----     
data ["powershell","rocks"] 

Sau khi tham khảo các loại tên một lần, tôi dường như có thể sử dụng tên lớp trong một loại đen mà không đủ điều kiện nó là tốt:

[Windows.Data.Json.JsonObject]::Parse("{}") # works without throwing errors now 

Vẫn còn rất mong muốn tìm thấy bất kỳ tài liệu về vấn đề này mặc dù

+1

bạn có chấp nhận một [bài đăng blog] (https://blogs.msdn.microsoft.com/ptorr/ 2012/05/27/loading-winrt-types-through-reflection-in-windows-8 /)? –

+0

@ PeterTorr-MSFT Tham chiếu tốt, vui lòng thêm câu trả lời nêu rõ ý nghĩa của tham số GetType/TypeInfo –

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