Разрешение двум проектам наследовать от одной и той же связи
Использование Microsoft Bond в проекте C#.
Предположим, у меня был файл Bond A, используемый в одном проекте A', и я хотел, чтобы у двух проектов B' и C'были файлы Bond C и C, оба из которых имеют структуры, которые наследуются от структуры в файле A. Как бы я это сделал??
Я думал о создании ProjectReference, но, похоже, он предоставляет только классы C#, сгенерированные из этих файлов Bond, и не позволяет мне наследовать Bond из исходных файлов Bond, поэтому вместо этого я сделал ссылку между одним проектом на другой. К сожалению, мое текущее решение очень подвержено ошибкам, и изменение этого местоположения файла в одном проекте также может сломать другой.
Каков будет предложенный способ сделать это?
1 ответ
Для того чтобы файлы Bond B и C наследовали или содержали типы из файла A Bond (в проекте A'), вам необходимо импортировать файл B связывания A вверху B и C. Это делает типы в A известными в B и C,
связь
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 "../../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
см. пример импорта C# в хранилище Bond. Однако это не относится к межпроектному импорту, поэтому вам необходимо адаптироваться к вашей ситуации.
Если вы разработчик на C++, это должно быть похоже на #include
пути.