← вернуться в ленту
ARTICLE18 марта 2025· .NET· Easy

Расположение proto контрактов в солюшене .net

Расположение proto контрактов в солюшене .net

Подксказка: как лучше расположить контракты .proto файлы в солюшене, чтобы потом не расстраиваться

Про работу с grpc и генерацию кода на базе .proto файлов. Плохая практика располагать протофайлы в одном из проектов из нашей любмой clean architecture, если проекты будут использовать одни и те же сервисы. Ошибки, с которым вы можете столкнуться, на вскидку следующие: "Protobuf generation: Duplicate symbol", "error CS0101: The namespace already contains a definition".


Монорепозитрий

Один из вариантов решения проблемы, если у вас монорепозитарий. Вынесите папку proto директорию на уровень выше, чем ваши проекты, необязательно ваш солюшен должен видеть этут папку (файл .sln/.slnx). а в проектах просто сошлитесь на эту директорию:

<ItemGroup>
<Protobuf Include="..\..\protos_src\*.proto" Link="protos\*.proto" GrpcServices="Both"/>
</ItemGroup>



Не-монорепозитарий

Тут у нас два варианта.


1й вариант. Отдельная репа с прото файлами, CI/CD сборка в готовые c# классы, которые потом из локального nuget подхватываем.


2й вариант. Git Submodules. Если есть уверенность в том, что ничего не сломаете, делаем "подрепозитарий" в основном, используя расположение описанное выше и качаем протофайлы из контрактной репы.