Recientemente tuve en mis manos gRPC en .net core y hasta ahora estoy muy satisfecho con él.
el único problema que tengo son los archivos proto, por ejemplo: si realizo un cambio en el archivo MyProtos.proto en mi solución de servidor grpc. Tendré que actualizar los archivos MyProtos.proto en todas mis soluciones de cliente.
así que me preguntaba si hay formas de compartir los archivos proto...
Intenté crear una solución separada y colocar los archivos proto allí y luego hacer referencia a todas las demás soluciones, pero no pude hacer que funcionara.
Puede distribuir archivos proto con el paquete nuget. Utilice el archivo .nuspec para empaquetar los archivos. Por ejemplo, si sus archivos *.proto están en la carpeta proto My.Server.Proto.nuspec puede verse así:
<?xml version="1.0" encoding="utf-8"?> <package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"> <metadata> <id>My.Server.Proto</id> <version>1.0.0</version> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>My Server Proto Files</description> <authors>My Company Ltd.</authors> </metadata> <files> <file src="proto/**/*.proto" /> </files> </package>Luego, en el proyecto donde desea consumir los archivos, instale las dependencias grpc
<ItemGroup> <PackageReference Include="Google.Protobuf" Version="3.14.0" /> <PackageReference Include="Grpc.Tools" Version="2.34.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> </ItemGroup>Instale su paquete proto:
<ItemGroup> <PackageReference Include="My.Server.Proto" Version="1.0.0" GeneratePathProperty="true" /> </ItemGroup> Tenga en cuenta GeneratePathProperty="true" . Esto le permitirá consultar la carpeta de instalación de nuget. Ahora agregue elementos Protobuf
<ItemGroup> <Protobuf Include="$(PkgMy_Server_Proto)/proto/**/*.proto" ProtoRoot="$(PkgMy_Server_Proto)" GrpcServices="Client" /> </ItemGroup> La variable $(PkgMy_Server_Proto) se resolverá en la carpeta My.Server.Proto My.Server.Proto. El nombre de la variable comienza con Pkg y le sigue el nombre del paquete cuando . reemplazado por _ .