Dot-Net
如何在 PowerShell 中引用 UWP 類
我想使用通用 Windows 平台庫中的數據類型,如何在 PowerShell 中引用包含的命名空間或程序集?
例如,我想使用
Windows.Data.Json.JsonObject該類來解析我的一些 json。如果這是一個正常的 .NET 類,我會做類似的事情
Add-Type -AssemblyName Windows.Data.Json $jsonObject = [Windows.Data.Json.JsonObject]::Parse('{data:["powershell","rocks"]}')但是這個策略讓我失望了:
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命名空間的程序集是錯誤的Windows.Data.Json.dll,但 API 引用實際上似乎不包含對包含文件的任何引用,這讓我相信 dll 文件實際上不是我的應該尋找。我假設 UWP 有它自己很酷的類似 GAC 的儲存,我可以從中載入共享庫,我只是不知道如何。
所以基本上我的問題是,如何將 UWP 共享庫載入到 PowerShell 中,我應該如何引用 UWP 類型文字?
在 Windows 10(內部版本 1703)上執行 PowerShell 5.1
發布此問題後不久,我偶然發現了 BurntToast 的 GitHub 儲存庫,這是一個允許從 PowerShell 引發 UWP Toast 通知的模組,它引用 WinRT ToastNotificationManager 類型,如下所示:
[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime]所以,看起來我對 UWP 類的語法是:
[<class name>,<namespace>,ContentType = WindowsRuntime]考慮到這一點,我用我在問題中給出的例子進行了嘗試,你瞧:
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"]在引用類型名稱一次之後,我似乎能夠在類型文字中使用類名稱而無需對其進行限定:
[Windows.Data.Json.JsonObject]::Parse("{}") # works without throwing errors now儘管如此,仍然非常渴望找到有關此的任何文件