2

GoogleProtocolBufferの使用にはPowerShellを使用する必要があります。言語固有のコンバーターが見つかりませんでした。protobuf-net(C#)を使用して.csコードを生成し、後で.dllファイルを生成しました。

見つかったすべてのアプローチにはNew-Objectの構築が含まれていましたが、パブリック静的クラス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手段のみを使用して問題を解決することは可能ですか?

4

2 に答える 2

0

あなたが何を尋ねようとしているのかわかりませんが、いくつかのパイオインターがあります.PowerShellでは、::.

例えば:

[System.IO.Path]::GetFileName("C:\somefile.jpg")

とにかく、 C# でやりたい場合は、次のようにすることができます。

$source = @"
public class SampleClass
{
    public static int Add(int a, int b)
    {
        return (a + b);
    }

    public int Multiply(int a, int b)
    {
        return (a * b);
    }
}
"@

 Add-Type $source
 $obj = New-Object SampleClass
于 2012-11-20T08:51:24.177 に答える