service reference与service dependency区别及gRPC场景选型
两者核心区别
- Service Dependency(服务依赖):属于开发调试阶段的运行时配置,仅作用于本地开发环境。添加后Visual Studio会在你启动当前项目时,自动拉起配置好的关联服务实例(比如本地运行的gRPC服务端、容器实例),不会向项目内引入任何proto文件、生成客户端代码,也不会参与最终编译输出,和SDK要复用proto生成客户端代码的需求完全无关。
- Service Reference(服务引用):属于编译期的代码生成配置。选择gRPC类型的服务引用后,VS会根据你指定的proto源文件,在项目编译时自动生成对应的gRPC客户端类、消息实体类,这些生成的代码会直接编译进项目的输出程序集,是编写服务调用逻辑的直接依赖。
你的场景选型结论
你的SDK复用同一份proto的场景,必须选择添加gRPC类型的Service Reference,不要选Service Dependency。
针对同仓库跨sln复用proto的需求,额外注意配置方式,避免复制多份proto文件导致版本不一致:
- 添加服务引用时不要选择从远程URL导入proto,直接选择本地服务端项目存放的原始proto文件路径
- 手动调整csproj中的Protobuf引用配置,使用链接方式引用源文件,不把proto复制到SDK项目目录,保证始终读取服务端维护的单份proto文件,配置示例如下:
<ItemGroup> <Protobuf Include="..\RelativePath\To\Server\Protos\YourService.proto" GrpcServices="Client" Link="Protos\YourService.proto" /> </ItemGroup>
- 不要在SDK项目中保留Service Dependency配置,否则后续其他开发者引用你发布的NuGet包时,会触发本地不存在的服务启动检查,造成不必要的报错。
内容的提问来源于stack exchange,提问作者CodeMonkey
相关产品推荐
相关产品推荐

