.net - 如何在 PowerShell 中引用 UWP 类

标签 .net windows powershell uwp

我想使用通用 Windows 平台库中的数据类型,如何在 PowerShell 中引用包含的命名空间或程序集?

例如,我想使用 Windows.Data.Json.JsonObject class给我解析一些 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

最佳答案

发布这个问题后不久,我偶然发现了 the GitHub repo for BurntToast ,一个允许从 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

虽然仍然很想找到关于此的任何文档

关于.net - 如何在 PowerShell 中引用 UWP 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45086059/

相关文章:

c# - 如何格式化/更改属性网格中的显示值

c# - 从序列号生成激活 key

Windows 访问冲突的 C++ 调用堆栈

powershell - PSCustomObject 是否有其显示到控制台的顺序?

c# - 如何为从源文件编译的应用程序分配自定义图标?

.net - .NET 中的运行时数据库迁移(存在吗?)

windows - 滥用 USB 大容量存储类进行无驱动 I/O

c++ - 尝试使用 boost 库时缺少 gmp.h

Powershell 编辑元数据,轨道号 1-9 前需要前导零

.net - 如何查找具有特定范围选项的所有变量?