2

在 C# 项目中使用Microsoft Bond 。

假设我在一个项目 A' 中使用了一个 Bond 文件 A,并且想要两个项目 B' 和 C' 有 Bond 文件 B 和 C,它们都有从文件 A 中的结构继承的结构。我会怎么做?

我考虑过制作一个 ProjectReference,但它似乎只提供从这些 Bond 文件生成的 C# 类,并且不允许我从原始 Bond 文件中进行 Bond 继承,因此我在一个项目与另一个项目之间建立了链接。不幸的是,我当前的解决方案非常容易出错,并且在一个项目中更改该文件位置也会破坏另一个项目。

建议的方法是什么?

4

1 回答 1

1

要让 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;
}

对于导入路径,您有三个选项:

  1. 使用完全限定的路径,例如import "C:/src/projectAPrime/schemas/a.bond"
  2. 使用相对路径,如import "../../projectAPrime/schemas/a.bond"
  3. 使用类似的相对路径import "a.bond"import "schemas/a.bond" and add to the Bond import paths: elsewhere in the consuming project, you'd make sure that theBondImportDirectory` 项目增加了项目 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路径。

于 2017-10-12T21:29:45.537 回答