c# - 将 .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
我不确定我做错了什么,尽管我尝试了几个导入选项,但结果相同。
解决方案
生成的B.cs
将不包含b.proto
通过 引用的类型import
。
因此,编译B.cs
也需要A.cs
包括在内。
如果您已经包含了这两个文件,请验证它们是否都已成功生成protoc
并且您包含最新版本。
推荐阅读
- javascript - 有人可以解释一下代码执行的这种行为吗?JS
- django - 使用 WhiteNoise 在生产模式下将 django 部署到 Elastic Beanstalk
- java - 给定一组集合,如何有效地找到至少有一个共同成员的集合?
- javascript - 正则表达式匹配句子中的字符串
- reactjs - 即使 DB 已正确更新,React UI 也不会在单击时重新渲染。第二次点击后,UI 重新渲染
- makefile - 为什么 make 重新编译所有文件?
- r - 分配给向量的二维数据类型
- typescript - 如何使用 React Native 测试库对 Yup .test() 方法进行单元测试?
- javascript - Spring Boot 将 js 文件返回为 MIME 'application/json' 而不是 'text/javascript'
- node.js - 使用 API 获取天气条件,api 发送一个与 img 相关的 id 得到了添加的 id URL 的基本框架不起作用