2017-10-11 100 views
2

在C#項目中使用Microsoft Bond允許兩個項目從同一個鍵繼承

假設我在一個項目A'中使用了一個Bond文件A,並且想要兩個項目B'和C'擁有Bond文件B和C,它們都具有從文件A中的結構繼承的結構。我會那樣做嗎?

我想過做一個ProjectReference,但它似乎只提供這些債券文件生成的C#類,而不是讓我從原來的債券文件使得債券繼承,所以不是我做了一個項目之間的鏈接另一個。不幸的是,我目前的解決方案非常容易出錯,並且在一個項目中更改文件位置也會打破另一個項目。

建議如何做到這一點?

+0

所以實際的問題在於如何在項目之間使用這些債券定義,而不是由它們生成的代碼? – rene

+0

@rene - 是的,問題是項目引用不允許債券編譯器消耗來自引用項目的債券(至少,不是我使用它的方式) – yuvalm2

回答

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. 使用相對路徑一樣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"
  3. 使用相對路徑的完全限定路徑

我不會推薦第一個選項,因爲它將路徑與特定機器的佈局聯繫在一起。選項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路徑類似。

+0

謝謝!只要確定,對於從另一個國家進口一種債券的答案是正確的,而不僅僅是繼承,對嗎? (例如包含鍵B的鍵的鍵A) – yuvalm2

+0

組合物以相同的方式工作。答案已更新。 – chwarr

相關問題