允许两个项目从同一个债券继承

时间:2017-10-11 10:53:53

标签: c# inheritance bond

在C#项目中使用Microsoft Bond

假设我在一个项目A'中使用了一个Bond文件,并希望有两个项目B'和C'具有Bond文件B和C,这两个文件都具有从文件A中的结构继承的结构。我这样做?

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

建议的方法是什么?

1 个答案:

答案 0 :(得分:1)

要让Bond文件B和C继承或包含来自Bond文件A的类型(在项目A'中),您需要在B和C的顶部导入Bond文件A.这使得A中的类型在B和C.

a.bond

namespace A;

struct Base { }

b.bond

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. 等完全限定的路径
  3. 使用import "../../projectAPrime/schemas/a.bond"
  4. 之类的相对路径
  5. 使用相对路径,例如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的搜索目录进行了扩充。
  6. 我不推荐第一个选项,因为它将路径绑定到一个特定机器的布局。实践中使用选项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没有办法让项目“导出”引用项目自动得到的值(那个我知道。)

    请注意,您仍然需要ProjectReference来项目A',因为项目B'和C'中生成的代码将依赖于生成的代码并将其编译到项目A'生成的程序集中。

    有关使用BondImportDirectory的导入的工作示例,请参阅Bond存储库中的C# import example。但是,会解决跨项目导入问题,因此您需要根据自己的情况进行调整。

    如果您是C ++开发人员,这应该与#include路径类似。