2017-07-13 47 views
7

'da UWP sınıflarına nasıl başvurabilirim Universal Windows Platform kitaplığından bir veri türü kullanmak istiyorum, PowerShell'de içerme ad alanını veya derlemeyi nasıl referans alabilirim?PowerShell

Örneğin, bazı json'u ayrıştırmak için Windows.Data.Json.JsonObject class'u kullanmak istiyorum.

bu, ben

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

gibi bir şey düzenli bir .NET sınıf yapardı olsaydı Ama bu strateji ile bana başarısız: ben sadece olduğumu olabilir, Şimdi

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 

Windows.Data.Json ad alanı için derleme Windows.Data.Json.dll olduğunu kabul ederken yanlış, ancak API başvurusu, dosyaları içeren herhangi bir başvuru içermiyor gibi görünmüyor, bir dll dosyasının aslında aramam gerekmediğine inanmamı sağladı.

UWP'nin, paylaşılan kütüphaneleri yükleyebileceğim kendi GAC benzeri bir mağazası olduğunu düşünüyorum, sadece nasıl olduğunu bilmiyorum.

Temelde sorum, , bir UWP paylaşılan kitaplığını PowerShell'e nasıl yükleyebilirim ve UWP türü değişmezlerine nasıl başvurmalıyım? Windows 10'a PowerShell 5.1 Running

,

cevap

6

Kısaca bu soruyu yazdıktan sonra, ben the GitHub repo for BurntToast üzerinde tökezledi PowerShell UWP Tost Bildirimler yükselterek sağlayan bir modül (1703 build) ve böyle WinRT ToastNotificationManager türünü başvurur :

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

Yani, ben UWP sınıflar için peşinde olduğum sözdizimi gibi görünüyor:

[<class name>,<namespace>,ContentType = WindowsRuntime] 
Bu düşünceyle

, ben söz verdi ve bak şu işe örnekle denedim:

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"] 

kez tipi adı başvuran sonra, bir tür sınıf adını kullanmak mümkün gibi görünüyor

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

Hala çok keskin

+1

bir [blog yazısı] (https://blogs.msdn.microsoft.com/ptorr/ kabul ederim gerçi bu konuda herhangi bir belge bulmak: yanı niteliğinde olmaksızın değişmez 2012/05/27/yükleme-winrt-tipleri üzerinden yansıması-in-pencereleri-8 /)? –

+0

@ PeterTorr-MSFT Güzel referans, GetType/TypeInfo parametresinin anlamını özetleyen bir cevap eklemek için çekinmeyin –