为所有解决方案共享一个 gRPC proto 文件
Sharing one gRPC proto file for all solutions
我最近接触了 .net Core 上的 gRPC,到目前为止我对它非常满意..
我遇到的唯一问题是原型文件,例如:如果我在我的 grpc 服务器解决方案中对 MyProtos.proto 文件进行了更改。我必须更新我所有客户端解决方案中的 MyProtos.proto 文件..
所以我想知道是否有共享原型文件的方法..
我试过创建一个单独的解决方案并将原型文件放在那里,然后将其引用到所有其他解决方案,但无法使其工作。
您可以使用 nuget 包分发原型文件。使用 .nuspec
file 来打包文件。例如,如果您 *.proto
文件位于 proto
文件夹下,My.Server.Proto.nuspec
可能如下所示:
<?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>
然后在你要消费文件的项目中安装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>
安装你的原型包:
<ItemGroup>
<PackageReference Include="My.Server.Proto" Version="1.0.0" GeneratePathProperty="true" />
</ItemGroup>
注意 GeneratePathProperty="true"
。这将允许您参考 nuget 安装文件夹。现在添加 Protobuf
项
<ItemGroup>
<Protobuf Include="$(PkgMy_Server_Proto)/proto/**/*.proto" ProtoRoot="$(PkgMy_Server_Proto)" GrpcServices="Client" />
</ItemGroup>
$(PkgMy_Server_Proto)
变量将解析到 My.Server.Proto
nuget 文件夹。变量名以Pkg
开头,当.
替换为_
时,后面是包名。
我最近接触了 .net Core 上的 gRPC,到目前为止我对它非常满意..
我遇到的唯一问题是原型文件,例如:如果我在我的 grpc 服务器解决方案中对 MyProtos.proto 文件进行了更改。我必须更新我所有客户端解决方案中的 MyProtos.proto 文件..
所以我想知道是否有共享原型文件的方法..
我试过创建一个单独的解决方案并将原型文件放在那里,然后将其引用到所有其他解决方案,但无法使其工作。
您可以使用 nuget 包分发原型文件。使用 .nuspec
file 来打包文件。例如,如果您 *.proto
文件位于 proto
文件夹下,My.Server.Proto.nuspec
可能如下所示:
<?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>
然后在你要消费文件的项目中安装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>
安装你的原型包:
<ItemGroup>
<PackageReference Include="My.Server.Proto" Version="1.0.0" GeneratePathProperty="true" />
</ItemGroup>
注意 GeneratePathProperty="true"
。这将允许您参考 nuget 安装文件夹。现在添加 Protobuf
项
<ItemGroup>
<Protobuf Include="$(PkgMy_Server_Proto)/proto/**/*.proto" ProtoRoot="$(PkgMy_Server_Proto)" GrpcServices="Client" />
</ItemGroup>
$(PkgMy_Server_Proto)
变量将解析到 My.Server.Proto
nuget 文件夹。变量名以Pkg
开头,当.
替换为_
时,后面是包名。