2016-04-12 9 views
0

私はprotobufsで動作するように始めている - 私がprotoファイルを持っている:私は私が得た(protoc-3.0.0-α-3-Win32のからの)コマンドラインツールprotobufと.net - 生成された.csファイルはどのように使用しますか?

を走った

syntax = "proto2"; 

message InputState { 
    required uint32 input = 1; 
    required string state = 2; 
} 

message InputStateData { 
    repeated InputState input = 1; 
} 

この予想外の.csファイル: !click me! Input.cs

私はnugetいるProtobufポータブルネットを含め、今私は私が次に何をしますか.csファイル生成されたファイル

を使用する方法さっぱりだが - は入力されています。 CSファイルは正しいですか?

+0

ファイルを「.csproj」に追加して使用します。 – Dai

+0

@Dai Input.csを確認すると、ファイルはC#で使用できるものではありません。私が見ることができます – pogorman

+0

何が使えないと思いますか?それは私にはうまく見えます。 – Dai

答えて

1

少なくとも「protobuf」という2つの完全に別々のツールが.netにあります。これはツール(Jonのバージョンは "protobuf-csharp-port"でしたが、現在はGoogleコードベースIIRCの一部です)を使用しているようですが、もう一方のライブラリ(protobuf -ネット)。それは動作しません!ライブラリのツーリングは一致する必要があります。

protobuf-netを使用する場合は、protobuf-netライブラリを単独で使用します(「コードファースト」をサポートしています:ツールなし)。またはprotobuf-netツールをprotobuf-netライブラリで使用します。

protobuf-csharp-port(これは単に "protobuf"かもしれません)を使用したい場合は、そのツールとそのライブラリを使用してください。あなたが手順を構築使用する必要がしたくない場合は情報については

、いるProtobufネットでのコードの最初のアプローチのために、手動で簡単な契約書を翻訳することができます

[ProtoContract] 
class InputState { 
    [ProtoMember(1)] 
    public uint Input {get;set;} 
    [ProtoMember(2)] 
    public string State {get;set;} 
} 
[ProtoContract] 
class InputStateData { 
    [ProtoMember(1)] 
    public List<InputState> Input {get;} = new List<InputState>(); 
} 
+0

ありがとう!私はあなたがあなたの意見を与えることを望んでいた。投稿した例は、私がジェネレータが作成することを期待したものでした。これを行うことができる発電機はありますか?また、なぜprotocツールは複雑なファイルを生成するのでしょうか? – pogorman

+0

@pogorman protobuf-netの 'protogen'ツールは、このようなものを出力します。 "理由"について:protocが動作するように設計されているからです。 –

+0

私は組み込みシステム(C言語で書かれたソフトウェア)と通信したいと思っています。通信される構造体は常に埋め込み側で定義されます。埋め込み側ではnanopbを使用します。私の希望は、組み込みのprotoファイルを使用して、上記のようなクラスを生成することでした。これも可能ですか?あるいは、標準のprotocツールを使うだけでいいですか?あなたはC#ファイルジェネレータのベストを使用すると思いますか?再度、感謝します。 – pogorman

0

[OK]を - 私が学んでいますさらに、これは私が期待したものに最も近いフォーマットを与えるファイルジェネレータです:https://github.com/floatinghotpot/protogen(protobuf-netでの使用のため)。これは私が必要とするものです。

//------------------------------------------------------------------------------ 
// <auto-generated> 
//  This code was generated by a tool. 
// 
//  Changes to this file may cause incorrect behavior and will be lost if 
//  the code is regenerated. 
// </auto-generated> 
    //------------------------------------------------------------------------------ 

// Generated from: inputs.proto 
namespace inputs 
{ 
[global::System.Serializable, global::ProtoBuf.ProtoContract([email protected]"InputState")] 
public partial class InputState : global::ProtoBuf.IExtensible 
{ 
public InputState() {} 

private uint _input; 
[global::ProtoBuf.ProtoMember(1, IsRequired = true, [email protected]"input", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] 
public uint input 
{ 
    get { return _input; } 
    set { _input = value; } 
} 
private string _state; 
[global::ProtoBuf.ProtoMember(2, IsRequired = true, [email protected]"state", DataFormat = global::ProtoBuf.DataFormat.Default)] 
public string state 
{ 
    get { return _state; } 
    set { _state = value; } 
} 
private global::ProtoBuf.IExtension extensionObject; 
global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) 
    { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } 
} 

[global::System.Serializable, global::ProtoBuf.ProtoContract([email protected]"InputStateData")] 
public partial class InputStateData : global::ProtoBuf.IExtensible 
{ 
public InputStateData() {} 

private readonly global::System.Collections.Generic.List<InputState> _input = new global::System.Collections.Generic.List<InputState>(); 
[global::ProtoBuf.ProtoMember(1, [email protected]"input", DataFormat = global::ProtoBuf.DataFormat.Default)] 
public global::System.Collections.Generic.List<InputState> input 
{ 
    get { return _input; } 
} 

private global::ProtoBuf.IExtension extensionObject; 
global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) 
    { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } 
} 

} 
関連する問題