Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编译protobuf网络生成的编解码器时出错_C#_Protocol Buffers_Protobuf Net - Fatal编程技术网

C# 编译protobuf网络生成的编解码器时出错

C# 编译protobuf网络生成的编解码器时出错,c#,protocol-buffers,protobuf-net,C#,Protocol Buffers,Protobuf Net,protobuf net生成的代码中存在有趣的错误。原型定义文件包含对象名为“值”的字段。使用-p:detectMissing选项为该值生成了什么protogen.exe: private int? _value; [global::ProtoBuf.ProtoMember(50, IsRequired = false, Name=@"value", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] [gl

protobuf net生成的代码中存在有趣的错误。原型定义文件包含对象名为“值”的字段。使用-p:detectMissing选项为该值生成了什么protogen.exe:

    private int? _value;
    [global::ProtoBuf.ProtoMember(50, IsRequired = false, Name=@"value", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
    [global::System.Xml.Serialization.XmlElement(@"value", Order = 50)]

    public int value
    {
        get { return _value ?? default(int); }
        set { _value = value; }
    }

    [global::System.Xml.Serialization.XmlIgnore]
    [global::System.ComponentModel.Browsable(false)]
    public bool valueSpecified
    {
      get { return _value != null; }
        set { if (value == (_value == null)) _value = value ? value : (int?)null; }
    }
    private bool ShouldSerializevalue() { return valueSpecified; }
    private void Resetvalue() { valueSpecified = false; }
编译器产生一个错误,认为value是关键字,而不是类属性:

无法确定条件表达式的类型,因为存在 “bool”和“int”之间没有隐式转换

手动更改生成代码的解决方法:

public int valueWorkaround
{
    get { return _value ?? default(int); }
}

public bool valueSpecified
{
  get { return _value != null; }
    set { if (value == (_value == null)) _value = value ? valueWorkaround : (int?)null; }
}

然而,修复代码生成也可能是有意义的?

是的,修复代码生成也是有意义的。我想,您应该向项目贡献者报告它。

是的,修复代码生成是有意义的。我想,你应该向项目贡献者报告。

Hmmm。。。这里有关键字检查代码(用于添加@etc)-我想我错过了一个。我来看看。@marc我在两台不同的计算机上面临相同的问题(使用相同版本的VS和ProtoBufGenerator)。。。在一台计算机上,
被正确添加,而在另一台计算机上它不是。。。非常奇怪。。。由于dll指示为1.0.0.0(我们在两台计算机上使用的安装程序都是
protobuf-net-VS10.msi
),所以无法确定ProtoBufGenerator的版本。@citizensane在安装文件夹中,您应该能够直接比较文件;然而,对于codegen来说,最重要的是xslt:protobuf-net.dll的版本将有助于准确理解它们是在什么时间点(svn commit)上构建的from@marc谢谢你,马克,如果从同一个安装程序开始,有人手动编辑了
csharp.xslt
文件,并在为
public bool XXX specified
生成代码时,将
XXX
前缀加上
this.XXX
,以解决名为
value
的字段。。。他只是忘了提醒团队中的每一个人这次修改。@marc@aleksey有关信息,我将修改的
csharp.xslt
放在这里:。。。与安装有
protobuf-net-VS10.msi
的行相比,只修改了几行,并且只打算解决名为
value
Hmmm的字段。。。这里有关键字检查代码(用于添加@etc)-我想我错过了一个。我来看看。@marc我在两台不同的计算机上面临相同的问题(使用相同版本的VS和ProtoBufGenerator)。。。在一台计算机上,
被正确添加,而在另一台计算机上它不是。。。非常奇怪。。。由于dll指示为1.0.0.0(我们在两台计算机上使用的安装程序都是
protobuf-net-VS10.msi
),所以无法确定ProtoBufGenerator的版本。@citizensane在安装文件夹中,您应该能够直接比较文件;然而,对于codegen来说,最重要的是xslt:protobuf-net.dll的版本将有助于准确理解它们是在什么时间点(svn commit)上构建的from@marc谢谢你,马克,如果从同一个安装程序开始,有人手动编辑了
csharp.xslt
文件,并在为
public bool XXX specified
生成代码时,将
XXX
前缀加上
this.XXX
,以解决名为
value
的字段。。。他只是忘了提醒团队中的每一个人这次修改。@marc@aleksey有关信息,我将修改的
csharp.xslt
放在这里:。。。与使用
protobuf-net-VS10.msi安装的行相比,只修改了几行,并且只打算解决名为
value