要使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;
}
對於導入路徑,你有三個選擇:
- 使用像
import "C:/src/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的搜索目錄中增加像import "../../projectAPrime/schemas/a.bond"
- 使用相對路徑的完全限定路徑
我不會推薦第一個選項,因爲它將路徑與特定機器的佈局聯繫在一起。選項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# import example。這不是而是解決了跨項目導入問題,但是,您需要根據自己的情況進行調整。
如果您是C++開發人員,這應該與#include
路徑類似。
所以實際的問題在於如何在項目之間使用這些債券定義,而不是由它們生成的代碼? – rene
@rene - 是的,問題是項目引用不允許債券編譯器消耗來自引用項目的債券(至少,不是我使用它的方式) – yuvalm2