在C#项目中使用Microsoft Bond。
假设我在一个项目A'中使用了一个Bond文件,并希望有两个项目B'和C'具有Bond文件B和C,这两个文件都具有从文件A中的结构继承的结构。我这样做?
我考虑过创建一个ProjectReference,但它似乎只提供从这些Bond文件生成的C#类,并且不允许我从原始的Bond文件中进行Bond继承,所以我在一个项目之间建立了一个链接其他。不幸的是,我当前的解决方案非常容易出错,并且在一个项目中更改该文件位置也会破坏另一个项目。
建议的方法是什么?
答案 0 :(得分:1)
要让Bond文件B和C继承或包含来自Bond文件A的类型(在项目A'中),您需要在B和C的顶部导入Bond文件A.这使得A中的类型在B和C.
namespace A;
struct Base { }
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没有办法让项目“导出”引用项目自动得到的值(那个我知道。)
请注意,您仍然需要ProjectReference来项目A',因为项目B'和C'中生成的代码将依赖于生成的代码并将其编译到项目A'生成的程序集中。
有关使用BondImportDirectory
的导入的工作示例,请参阅Bond存储库中的C# import example。但是,不会解决跨项目导入问题,因此您需要根据自己的情况进行调整。
如果您是C ++开发人员,这应该与#include
路径类似。