使用Protobuf 25.2编译带Map的.proto文件出现CS1061错误求助
解决protoc 25.2编译C# MapField的CS1061错误
问题原因
protoc 25.2生成的C#代码依赖Google.Protobuf 25.2.x版本的Runtime包,若你当前项目引用的Google.Protobuf版本过低(比如适配protoc 3.4.0的旧版本),会导致生成代码中调用的MergeFrom方法在低版本Runtime的MapField中不存在,从而触发CS1061错误。
解决步骤
更新Google.Protobuf NuGet包版本
在C#项目中,将Google.ProtobufNuGet包升级至与protoc一致的25.2.x版本,确保生成代码与Runtime包兼容。例如在Package Manager Console执行:Install-Package Google.Protobuf -Version 25.2.0也可通过NuGet包管理器可视化界面搜索并完成更新。
确保命名空间引用正确
新版MapField的相关方法定义在Google.Protobuf.Collections命名空间下,若生成的代码未自动添加该引用,手动在文件顶部补充:using Google.Protobuf.Collections;重新生成C#代码
使用protoc 25.2重新编译proto文件,避免混合不同版本生成的代码,执行命令示例:protoc --csharp_out=./pb ./your_proto_file.proto
验证
完成上述操作后重新编译C#项目,CS1061错误即可消除,因为新版Runtime包的MapField已包含生成代码所需的MergeFrom方法实现。
内容的提问来源于stack exchange,提问作者monicaaaa
相关产品推荐
相关产品推荐

