gpt4 book ai didi

c# - PowerShell 和 Google Protocol Buffer 技术

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:05 25 4
gpt4 key购买 nike

我需要使用 PowerShell 来使用 Google Protocol Buffer。尚未找到特定于语言的转换器,并使用 protobuf-net (C#) 生成 .cs 代码和后来的 .dll 文件。

所有找到的方法都涉及 New-Object 构造,但是公共(public)静态类 Serializer 是在 protobuf-net.dll 中定义的,因此无法创建对象(类实例)-> New-Object:找不到构造函数。无法为类型 ProtoBuf.Serializer 找到合适的构造函数。

$memory_stream = New-Object System.IO.MemoryStream
#######
$obj = new-object ControlInterface.EnableGate
$obj.GateId = 2
$obj.Day = 7
#######
$method = [ProtoBuf.Serializer]
$Serialize = $method.GetMethods() | Where-Object {
$_.Name -eq "Serialize" -and
$_.MetadataToken -eq "110665038"
}
$massive = @($memory_stream,$obj)
$closedMethod = $Serialize.MakeGenericMethod([ControlInterface.EnableGate])
$closedMethod.Invoke($method,$massive)

当前错误如下:使用“2”个参数调用“Invoke”时出现异常:“‘System.Management.Automation.PSObject’类型的对象无法转换为‘System.IO.Stream’类型。”

是否可以避免使用 C# 的额外代码并仅使用 PowerShell 方法来克服该问题?

最佳答案

这是由于 PowerShell 将新创建的对象转换为动态 PSObject 类型,而不是实际的 .NET 类型。

您所要做的就是对对象变量声明应用强制​​转换,您的烦恼就会烟消云散。 (我花了很长时间才发现)

修正你的例子:

[IO.MemoryStream] $memory_stream = New-Object IO.MemoryStream
#######
[ControlInterface.EnableGate] $obj = new-object ControlInterface.EnableGate
$obj.GateId = 2
$obj.Day = 7
#######
$method = [ProtoBuf.Serializer]
$Serialize = $method.GetMethods() | Where-Object {
$_.Name -eq "Serialize" -and
$_.MetadataToken -eq "110665038"
}
$massive = @($memory_stream,$obj)
$closedMethod = $Serialize.MakeGenericMethod([ControlInterface.EnableGate])
$closedMethod.Invoke($method,$massive)

关于c# - PowerShell 和 Google Protocol Buffer 技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13424293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com