首页 > 解决方案 > 将 .proto 文件导入另一个

问题描述

我有一个显然很简单的问题。我有两个 .proto 文件,比如说 a.proto 和 b.proto,b.proto 导入 a.proto:

b.proto

syntax = "proto3";
package My.Example.Proj;
import "a.proto";
message B {
    ....
    A fromTheOther = 1;
}

a.proto

syntax = "proto3";
package My.Example.Proj;
message A {
   ....
}

在我的 proto.targets 中,我有将 .proto 文件编译为 C# 的命令:

"$(MSBuildThisFileDirectory)......\protobuf\protoc-3.9.2\bin\protoc.exe" --csharp_out=$(SolutionDir)\generated_csharp\ --proto_path=%(RootDir)%(Directory) - -error_format="msvs" %(文件名).proto

这个命令确实产生了 A.cs 和 B.cs,但是当我尝试在另一个 C# 项目中使用这些文件时,我在 B.cs 中看到了这个编译错误(应该使用来自另一个原型的类型 A) :

错误 CS0234 名称空间“My.Example.Proj”中不存在类型或名称空间名称“A”(您是否缺少程序集引用?)* 在 B.cs 中的这一行:public global::My.Example.Proj.A FromTheOther

我不确定我做错了什么,尽管我尝试了几个导入选项,但结果相同。

标签: c#protocol-buffers

解决方案


生成的B.cs将不包含b.proto通过 引用的类型import

因此,编译B.cs也需要A.cs包括在内。

如果您已经包含了这两个文件,请验证它们是否都已成功生成protoc并且您包含最新版本。


推荐阅读