要让 Bond 文件 B 和 C 继承自 Bond 文件 A(在项目 A' 中)的类型或包含来自 Bond 文件 A 的类型,您需要在 B 和 C 的顶部导入 Bond 文件 A。这使得 A 中的类型在 B 和 C 中已知.
a.债券
namespace A;
struct Base { }
b.债券
import "a.bond"
namespace B;
struct Derived : A.Base { }
struct Composition {
// notice fully qualified name is used for Base
0: A.Base has_a_base;
}
对于导入路径,您有三个选项:
- 使用完全限定的路径,例如
import "C:/src/projectAPrime/schemas/a.bond"
- 使用相对路径,如
import "../../projectAPrime/schemas/a.bond"
- 使用类似的相对路径
import "a.bond"
,import "schemas/a.bond" and add to the Bond import paths: elsewhere in the consuming project, you'd make sure that the
BondImportDirectory` 项目增加了项目 A 的搜索目录。
我不推荐第一个选项,因为它将路径与特定机器的布局联系起来。在实践中使用了选项 2 或 3 的混合。
对于方法三,消费项目通常直接在其中或通过它导入的其他一些 MSBuild 文件有类似的东西。
<ItemGroup>
<BondImportDirectory Include="$(ProjectAPrimeRoot)" />
<!-- or some other reference to project A, depending
on how your projects are structured (perhaps you
have a all_projects.props file for these sort of
variables or item modifications -->
</ItemGroup>
我不能给你比这更具体的指导,因为我不知道你的具体项目结构,而且 MSBuild 没有办法让项目“导出”引用项目自动获得的值(我是意识到)。
请注意,您仍然需要对项目 A' 的 ProjectReference,因为在项目 B' 和 C' 中生成的代码将依赖于生成并编译到项目 A' 生成的程序集中的代码。
有关使用导入的工作示例,BondImportDirectory
请参阅 Bond 存储库中的C# 导入示例。但是,这并不能解决跨项目导入问题,因此您需要根据自己的情况进行调整。
如果您是 C++ 开发人员,这应该类似于#include
路径。